2013-01-07 19 views
6

मेरी लक्षित परियोजनाएं विंडोज 8, विनरेट और विंडोज फोन 8 हैं। मैं स्रोतों को साझा करने के लिए समाधान के लिए पोर्टेबल क्लास लाइब्रेरी का उपयोग कर रहा हूं। मुझे किसी अन्य एमवीसी वेब एपीआई प्रोजेक्ट में बनाई गई कुछ आरईएसटी सेवाओं को कॉल करने की आवश्यकता है लेकिन HttpClient कक्षा पीसीएल में उपलब्ध नहीं है। इसे हल करने के लिए एक अच्छा तरीका कौन सा होगा? मैं एक सेवा इंटरफ़ेस में सोच रहा था और फिर HttpClient, WebClient या प्रत्येक मामले में उचित कक्षा का उपयोग करके प्रत्येक प्लेटफॉर्म के लिए एक प्रोजेक्ट बनाने के लिए। यह दृष्टिकोण काम कर सकता था लेकिन मैं सोच रहा था कि क्या अन्य तरीके हैं।पोर्टेबल क्लास लाइब्रेरी से आरईएसटी सेवाओं को कैसे कॉल करें?

+1

संभावित डुप्लिकेट: http://stackoverflow.com/questions/13547479/are-there-any-rest-libraries-out-there-that-work-with-portable-class-libraries –

+0

http://blogs.msdn.com/b/dotnet/archive/2013/05/22/portable-httpclient-is-now-available-as-rc.aspx – SLaks

उत्तर

2

एचटीपी क्लाइंट माइक्रोसॉफ्ट के दृश्य से पोर्टेबल नहीं है। एकमात्र अन्य तरीका अलग-अलग पुस्तकालयों को बनाना है जो प्रत्येक प्रोजेक्ट लागू करेंगे, और जैसा आपने वर्णन किया है वैसा ही करें। इस तरह, आप उन सभी प्लेटफार्मों में समानता प्राप्त कर सकते हैं जिन्हें आप लक्षित करना चाहते हैं।

मैंने सोचा था कि प्लेटफ़ॉर्म पर आने पर समानता के कुछ स्तर थे ... यदि आपके पास अलग-अलग परियोजनाएं हैं, तो आप अपनी कोड फ़ाइलों को अन्य प्रोजेक्ट से लिंक कर सकते हैं ताकि आपको बनाए रखने की आवश्यकता न हो कई परियोजनाएं, या यहां तक ​​कि Project Linker का उपयोग करें (हालांकि मुझे नहीं पता कि 2012 संस्करण मौजूद है या नहीं)।

+0

सिडेनोट: प्रोजेक्ट लिंकर फर बनाम 2012 है: http: // visualstudiogallery .msdn.microsoft.com/273dbf44-55a1-4ac6-a1f3-0b9741587b9a –

2

पोर्टेबल बाकी हाल ही में GitHub पर उपलब्ध हो गया है और वेब अनुरोध यह देखते हुए कि WebClient अनुपलब्ध है बनाने में मदद मिलनी चाहिए:

https://github.com/advancedrei/PortableRest#readme

PortableRest अन्य पोर्टेबल में REST API ग्राहकों को लागू करने के लिए एक पोर्टेबल कक्षा लाइब्रेरी है कक्षा पुस्तकालयों। यह किसी भी प्लेटफ़ॉर्म पर प्रतीक्षा करने योग्य निष्पादन के लिए तेज़, अनुकूलन क्रमिकरण के साथ-साथ Microsoft.Bcl.Async लाइब्रेरी के लिए JSON.NET का लाभ उठाता है। यह को रीस्टशर्प के साथ काफी हद तक ड्रॉप-इन होने के लिए डिज़ाइन किया गया है, हालांकि आपको कुछ बदलाव करने और पुन: संकलित करने की आवश्यकता होगी।

इस प्रारंभिक रिलीज में सरल JSON अनुरोधों के लिए सीमित समर्थन है। अधिक विकल्प (एक्सएमएल और उम्मीद है कि डेटाकंट्रैक्ट समर्थन सहित) बाद में रिलीज़ में उपलब्ध होंगे।

24

माइक्रोसॉफ्ट के पास rewritten the HttpClient library to be portable (PCL) है और यह here on NuGet है। समय के लिए, यह केवल प्री-रिलीज के रूप में उपलब्ध है, इसलिए यदि आप NuGet GUI पैकेज मैनेजर का उपयोग कर रहे हैं तो सुनिश्चित करें कि आप "प्रीरलीज़ शामिल करें" पर सेट करें। कमांड लाइन से:

Install-Package Microsoft.Net.Http 
2

काफी देर से, लेकिन यहाँ एक सरल कोड मैं करना पड़ा है, पीएलसी (भी काम कर सकते हैं) XBox 360 के अलावा सब कुछ के लिए लक्षित है। मैं इस लक्ष्य सूची के लिए HttpClient का उपयोग नहीं कर सका।

public class WebDownload 
{ 
    public class WebDownloadResult 
    { 
     public HttpStatusCode StatusCode { get; set; } 
     public int StatusCodeNumber { get; set; } 
     public bool ErrorOccured { get; set; } 
     public string ResultString { get; set; } 
    } 

    public static void Download(string url, Action<WebDownloadResult> resultAction) 
    { 
     WebDownloadResult response = new WebDownloadResult(); 
     try 
     { 
      HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 

      IAsyncResult result = (IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(delegate(IAsyncResult tempResult) 
      { 
       HttpWebResponse webResponse = (HttpWebResponse)myHttpWebRequest.EndGetResponse(tempResult); 
       Stream responseStream = webResponse.GetResponseStream(); 

       using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8)) 
       { 
        response.ResultString = reader.ReadToEnd(); 
        response.StatusCode = webResponse.StatusCode; 
        response.StatusCodeNumber = (int)webResponse.StatusCode; 

        if (resultAction != null) resultAction(response); 
       } 
      }), null); 
     } 
     catch 
     { 
      response.ErrorOccured = true; 
      if (resultAction != null) resultAction(response); 
     } 
    } 
} 
+0

धन्यवाद दोस्त, यही एकमात्र चीज है जिसे मैं अपने पीसीएल प्रोजेक्ट में काम कर सकता हूं। इसके ऊपर एक आरईएसटी क्लाइंट बनाने के बारे में सोच रहा है ..... – skhro87

+0

यह कमाल है! मैं आम तौर पर सी # और पीसीएल के साथ बहुत अनुभवी नहीं हूं, तो क्या वहां कोई है जो मुझे बता सकता है कि मुझे "परिणाम एक्शन" रिटर्न प्रकार को कैसे संभालना चाहिए?मुझे प्राप्त प्रतिक्रिया को पार्स करने के लिए "डाउनलोड" विधि के बाहर "परिणाम स्ट्रिंग" तक पहुंचने की आवश्यकता है। अग्रिम धन्यवाद। – Demitrian

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