2013-01-07 6 views
6

Meine Zielprojekte sind Windows 8, WinRT und Windows Phone 8. Ich verwende Portable Class Libraries für die Lösung, um die Quellen zu teilen. Ich muss einige REST-Dienste aufrufen, die in einem anderen MVC Web API-Projekt erstellt wurden, aber die Klasse HttpClient ist in der PCL nicht verfügbar. Was wäre ein guter Ansatz, um es zu lösen? Ich dachte in einer Service-Schnittstelle und dann ein Projekt für jede Plattform zu erstellen, mit HttpClient, WebClient oder die entsprechende Klasse in jedem Fall. Dieser Ansatz könnte funktionieren, aber ich frage mich, ob es andere Wege gibt.Wie REST-Dienste von Portable Class Library aufgerufen werden?

+1

Mögliche doppelte: 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

Antwort

2

HttpClient ist aus Microsoft Sicht nicht unbedingt portierbar. Die einzige andere Möglichkeit besteht darin, separate Bibliotheken zu erstellen, die von jedem Projekt implementiert werden, und wie Sie es beschrieben haben. Auf diese Weise können Sie auf allen Plattformen, die Sie anvisieren möchten, eine gemeinsame Lösung erreichen.

Ich dachte, es gab ein gewisses Maß an Gleichwertigkeit, wenn es um die Plattformen ging, die Sie anvisieren ... Wenn Sie separate Projekte haben, könnten Sie Ihre Code-Dateien mit dem anderen Projekt verknüpfen, so dass Sie nicht warten müssen mehrere Projekte, oder verwenden Sie sogar Project Linker (obwohl ich nicht weiß, ob eine 2012-Version existiert).

+0

Hinweis: Project Linker existiert für 2012: http: // Visualstudiogallery .msdn.microsoft.com/273dbf44-55a1-4ac6-a1f3-0b9741587b9a –

2

Tragbare REST hat auf GitHub seit kurzem verfügbar und soll zu machen Web-Anfragen gegeben helfen, dass WebClient ist nicht verfügbar:

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

PortableRest ist eine Portable Klassenbibliothek zur Implementierung REST API Kunden in anderen Tragbarer Klassenbibliotheken Es nutzt JSON.NET für schnelle, anpassbare Serialisierung, sowie die Microsoft.Bcl.Async Bibliothek für die erwartete Ausführung auf jeder Plattform. Es ist entworfen, um weitgehend Drop-in kompatibel mit RestSharp sein, obwohl Sie müssen einige Änderungen vornehmen und neu kompilieren.

Diese erste Version hat eingeschränkte Unterstützung für einfache JSON-Anforderungen. Weitere Optionen (einschließlich XML und hoffentlich DataContract-Unterstützung) werden in späteren Versionen verfügbar sein.

2

ziemlich spät, aber hier ein einfacher Code ist was ich tun musste, ist PLC außer XBox 360 für alles gezielt (könnte funktionieren auch). Ich konnte HttpClient nicht für diese Zielliste verwenden.

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

danke Mann, das ist das einzige, was ich in meinem PCL-Projekt arbeiten konnte. darüber nachzudenken, einen REST-Client darauf zu bauen ..... – skhro87

+0

Das ist genial! Ich bin persönlich nicht sehr erfahren mit C# und PCL im Allgemeinen, also gibt es jemanden da draußen, der mir sagen könnte, wie ich den "resultAction" Rückgabetyp behandeln soll?Ich muss auf den "ResultString" außerhalb der "Download" -Methode zugreifen, um die erhaltene Antwort zu parsen. Vielen Dank im Voraus. – Demitrian

Verwandte Themen