11

Windows サービスで記述されたアプリケーションがあり、このアプリケーションは Asp.Net MVC 4 WebAPI で記述された WebAPI を呼び出す必要があります。WebAPI のこのメソッドは、次のようなプリミティブ型の DTO を返します。

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;
}

私の質問は、Windows サービスから webApi を呼び出すにはどうすればよいですか? URL とパラメーターの値はありますが、呼び出す方法と、xml の結果を DTO に逆シリアル化する方法がわかりません。

ありがとうございました

4

2 に答える 2

19

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);
}
于 2012-10-17T21:25:15.923 に答える
4

この NuGet パッケージMicrosoft ASP.NET Web API クライアント ライブラリを Windows サービス プロジェクトにインストールできます。

以下は、HttpClient の使用方法を示す簡単なコード スニペットです。

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

(簡単にするために、ここで .Result() を呼び出しています...)

HttpClient のその他のサンプルについては、ASP.NET Web API および HttpClient サンプルのリストを参照してください 。

于 2012-10-17T21:28:33.963 に答える