2012-10-17 16 views
5

मेरे पास विंडोज सेवा में एक एप्लीकेशन लिखा गया है और इस ऐप को एएसपी.नेट एमवीसी 4 वेबएपीआई में लिखे गए वेबएपीआई को कॉल करने की आवश्यकता है। वेबएपीआई में इस विधि आदिम प्रकार, कुछ तरह के साथ एक डीटीओ वापसी:विंडोज सेवा से वेबएपीआई को कैसे कॉल करें

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 कैसे फोन कर सकते हैं? मेरे पास मेरा यूआरएल और पैरामीटर का मान है, लेकिन मुझे नहीं पता कि कैसे कॉल करना है और डीटीओ को एक्सएमएल परिणाम को कैसे बेकार करना है। आप

+0

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

+1

इन लोगों की सिफारिश के रूप में HttpClient को संदर्भित करने के अलावा, यदि आप ImportResultDTO को इसके स्थान पर रखते हैं तो यह जीवन को आसान बना देगा अपनी कक्षा पुस्तकालय (आपकी सेवा मॉडल लाइब्रेरी) और उसके बाद वेब एपीआई सेवा और विंडोज सेवा दोनों से लाइब्रेरी का संदर्भ लें। इसके बाद आप HttpClient को सेवा कॉल डेटा के भौतिकरण को मजबूती से टाइप किए गए डीटीओ कक्षा में संभाल सकते हैं। – Oppositional

उत्तर

13

आप System.Net.Http.HttpClient इस्तेमाल कर सकते हैं

धन्यवाद। आपको स्पष्ट रूप से नकली आधार पते को संपादित करने और नीचे दिए गए उदाहरण में यूआरआई से अनुरोध करने की आवश्यकता होगी, लेकिन यह प्रतिक्रिया स्थिति की जांच करने का मूल तरीका भी दिखाता है।

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

धन्यवाद ब्लिन्स, क्या यह देखने का कोई तरीका है कि मैं क्लाइंट को कॉल करने से पहले अपने वेबएपीआई का यूआरएल उपलब्ध हूं या नहीं। GETAsync (...)। परिणाम '? मेरा मतलब है क्योंकि इंटरनेट कनेक्शन या मेरी वेबपी अस्थिर हो सकती है और इसके लिए मुझे एक सही घटना करने के लिए पहले जांचना होगा। धन्यवाद। –

+0

क्या आप अभी तक कॉल/कैच ब्लॉक में GetAysnc पर कॉल को लपेट नहीं सकते हैं और संभावित अपवाद को संभाल सकते हैं? इसे आज़माएं और स्टैक ट्रेस का पालन करें, आंतरिक अपवाद आपके जैसा हैं (जैसे "कोई कनेक्शन नहीं बनाया जा सकता है ...") – blins

2

आपको अपने Windows सेवा परियोजना को यह NuGet पैकेज Microsoft ASP.NET Web API Client Libraries स्थापित कर सकते हैं।

यहाँ एक सरल कोड स्निपेट HttpClient कैसे उपयोग करने के लिए प्रदर्शन किया गया है:

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

(मैं .Result (फोन कर रहा हूँ) यहाँ सरलता के लिए ...)

का अधिक नमूने के लिए एचटीपी क्लाइंट, कृपया इसे देखें: List of ASP.NET Web API and HttpClient Samples.

+0

धन्यवाद मैगी। मैं तुम्हारा awser वोट। क्या क्लाइंट को कॉल करने से पहले यह जांचने का कोई तरीका है कि मेरे वेबएपीआई का यूआरएल उपलब्ध है या नहीं। GETAsync (...)। परिणाम? मेरा मतलब है क्योंकि इंटरनेट कनेक्शन या मेरी वेबपी अस्थिर हो सकती है और इसके लिए मुझे एक सही घटना करने के लिए पहले जांचना होगा। धन्यवाद। –

संबंधित मुद्दे