2012-10-17 28 views
5

Windows Service'te yazılmış bir uygulama var ve bu uygulamanın Asp.Net MVC 4 WebAPı'de yazılmış bir WebAPI'ye çağrılması gerekiyor. Windows Servisi'nden WebAPI nasıl arayabilir,Windows Service'ten WebAPI nasıl çağırılır

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

ve benim WebAPI

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

Benim sorum içinde: WebAPI bu yöntem ilkel türü, gibi bir şey ile bir DTO dönmek? URL'm ve parametremin değeri var, ancak nasıl arama yapacağımı ve xml sonucunu DTO'ya nasıl atayacağımı bilmiyorum. Eğer

+0

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

+1

In HttpClient öğesinin tavsiye ettiği gibi başvuruda bulunmaya ek olarak, ImportResultDTO ürününü yerleştirdiğinizde hayatı kolaylaştırır. Kendi sınıf kitaplığınız (hizmet modeli kitaplığınız) ve ardından bu kitaplığı hem Web API hizmetinden hem de Windows hizmetinden başvuruyorsunuz. Ardından, HttpClient'in servis çağrı verilerinin materyalizasyonunu güçlü bir şekilde yazılan DTO sınıfına yönlendirmesini sağlayabilirsiniz. – Oppositional

cevap

13

Sen System.Net.Http.HttpClient kullanabilirsiniz

ederiz. Sahte taban adresini düzenlemeniz ve aşağıdaki örnekte URI isteğinde bulunmanız gerekir, ancak bu aynı zamanda yanıt durumunu kontrol etmenin temel bir yolunu da gösterir.

// 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

Teşekkür ederim blins, "client.GetAsync (...)." Sonucunu almadan önce WebAPI'mın URL'sinin kullanılabilir olup olmadığını kontrol etmenin bir yolu var mı? Yani internet bağlantısı veya webapi kararsız olabilir ve bunun için doğru bir olay yapmak için önce kontrol etmek gerekiyor. Teşekkür ederim. –

+0

Bir try/catch bloğundaki GetAysnc'e çağrıyı kapatabilir ve olası İstisnayı ele alabilir misiniz? Bunu deneyin ve yığın izini takip edin, iç istisnalar sizin neye benzediğine benziyor (ör. "Bağlantı kurulamadı çünkü ...") – blins

2

Sen Windows Hizmet projeye bu Nuget paketini Microsoft ASP.NET Web API Client Libraries yükleyebilirsiniz. İşte

basit kod parçacığı HttpClient nasıl kullanılacağını kanıtlıyor:

(I .Result (aramıştım) burada basitlik bakımından ...)

daha numunesi için

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

HttpClient, lütfen şuna bir bakın: List of ASP.NET Web API and HttpClient Samples.

+0

Teşekkür ederim Maggie. Ben senin uşağınızı oylarım. WebAPI adresimin URL'sinin client.GetAsync (...) araması yapmadan önce uygun olup olmadığını kontrol etmenin bir yolu var mı? Yani internet bağlantısı veya webapi kararsız olabilir ve bunun için doğru bir olay yapmak için önce kontrol etmek gerekiyor. Teşekkür ederim. –