2012-10-17 10 views
5

Windowsサービスで作成されたアプリケーションがあり、このアプリケーションはAsp.Net MVC 4 WebAPiで書かれたWebAPIを呼び出す必要があります。私の質問は、私がWindowsサービスからWEBAPIを呼び出すことができますどのように、あるWindowsサービスからWebAPIを呼び出す方法

class ImportResultDTO { 
    public bool Success { get; set; } 
    public string[] Messages { get; set; } 
} 

と私のWEBAPIで

public ImportResultDTO Get(int clientId) { 
    // process.. and create the dto result. 
    return dto; 
} 

:?WebAPIの中に、このメソッドはプリミティブ型、のようなものでDTOを返しますか私は自分のURLとパラメータの値を持っていますが、どのように呼び出すか、xmlの結果をDTOに逆シリアル化する方法はわかりません。あなたは

+0

http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client – blins

+1

人々が推薦するようにHttpClientを参照するだけでなく、ImportResultDTOを自分のクラスライブラリ(サービスモデルライブラリ)を開き、Web APIサービスとWindowsサービスの両方からそのライブラリを参照します。その後、HttpClientがサービス呼び出しデータのマテリアライゼーションを厳密に型指定されたDTOクラスに処理させることができます。 – Oppositional

答えて

13

あなたはSystem.Net.Http.HttpClientを使用することができ

はありがとうございました。以下の例では、偽のベースアドレスとリクエストURIを編集する必要がありますが、レスポンスステータスも確認するための基本的な方法も示しています。

// Create an HttpClient instance 
HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri("http://localhost:8888/"); 

// Usage 
HttpResponseMessage response = client.GetAsync("api/importresults/1").Result; 
if (response.IsSuccessStatusCode) 
{ 
    var dto = response.Content.ReadAsAsync<ImportResultDTO>().Result; 
} 
else 
{ 
    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); 
} 
+0

blinsさん、ありがとうございます。私が 'client.GetAsync(...)を呼び出す前に、私のWebAPIのURLが利用可能かどうかを確認する方法はありますか?私はインターネット接続やwebapiが不安定になる可能性があり、正しいeventLogを実行する前にそれをチェックする必要があるからです。ありがとうございました。 –

+0

try/catchブロック内のGetAysncへの呼び出しをラップし、可能なExceptionを処理できませんか?それを試して、スタックトレースに従うと、内側の例外はあなたの後ろのものと同じように見えます(たとえば、「接続できませんでした...」) – blins

2

このNuGetパッケージMicrosoft ASP.NET Web API Client Librariesは、Windowsサービスプロジェクトにインストールできます。ここで

はHttpClientをを使用する方法を示す簡単なコードスニペットです:

 var client = new HttpClient(); 
     var response = client.GetAsync(uriOfYourService).Result; 
     var content = response.Content.ReadAsAsync<ImportResultDTO>().Result; 

(私は簡単のため、ここで.Result()を呼んでいる...)

のより多くのサンプルについてHttpClientを確認してください。List of ASP.NET Web API and HttpClient Samples.

+0

ありがとうマギー。私はあなたのawserに投票します。私がclient.GetAsync(...)を呼び出す前に、私のWebAPIのURLが利用可能かどうかを確認する方法はありますか?私はインターネット接続やwebapiが不安定になる可能性があり、正しいeventLogを実行する前にそれをチェックする必要があるからです。ありがとうございました。 –

関連する問題