2013-01-07 7 views
6

Moje docelowe projekty to Windows 8, WinRT i Windows Phone 8. Używam Portable Class Libraries do rozwiązania w celu udostępniania źródeł. Potrzebuję wywołać niektóre usługi REST utworzone w innym projekcie MVC Web Api, ale klasa HttpClient nie jest dostępna w PCL. Jakie byłoby dobre podejście do rozwiązania problemu? Myślałem w interfejsie usługi, a następnie, aby utworzyć projekt dla każdej platformy, przy użyciu HttpClient, WebClient lub odpowiedniej klasy w każdym przypadku. Takie podejście może działać, ale zastanawiałem się, czy istnieją inne sposoby.Jak wywoływać usługi REST z Portable Class Library?

+1

Możliwy duplikat: 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

Odpowiedz

2

HttpClient niekoniecznie jest przenośny z widoku Microsoftu. Jedyny inny sposób to utworzenie oddzielnych bibliotek, które każdy projekt będzie implementował, i wykonaj to, co opisałeś. W ten sposób możesz osiągnąć wspólne cechy na wszystkich platformach, na które chcesz kierować reklamy.

Pomyślałem, że istnieje pewien poziom równoważności, jeśli chodzi o platformy, na które kierujesz ... Jeśli musisz mieć oddzielne projekty, możesz połączyć swoje pliki kodu z innym projektem, aby nie trzeba było utrzymywać wiele projektów, a nawet używać Project Linker (choć nie wiem, czy istnieje wersja 2012).

+0

Sidenote: Project Linker istnieje przed rokiem 2012: http: // visualstudiogallery .msdn.microsoft.com/273dbf44-55a1-4ac6-a1f3-0b9741587b9a –

2

Portable REST ostatnio stał się dostępny na GitHub i powinno pomóc dokonywania żądań internetowych podanych że WebClient jest niedostępna:

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

PortableRest jest przenośnym Class Library dla wdrożenia API REST klientów w innych przenośnych Biblioteki klas. Wykorzystuje on szybką, dostosowywaną serializację JSON.NET, a także bibliotekę Microsoft.Bcl.Async , której można oczekiwać na dowolnej platformie. Został zaprojektowany, aby być w dużym stopniu kompatybilny z RestSharp, ale będziesz musiał dokonać pewnych zmian i rekompilacji.

Ta pierwsza wersja ma ograniczone wsparcie dla prostych żądań JSON. Więcej opcji (w tym XML i miejmy nadzieję wsparcie DataContract) będzie dostępne w kolejnych wydaniach.

2

Dość późno, ale tutaj jest prosty kod musiałem zrobić, PLC jest skierowany do wszystkiego z wyjątkiem Xbox 360 (może pracować zbyt). Nie mogłem użyć HttpClient dla tej listy docelowej.

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

dziekuje koleś, to jedyna rzecz, jaką mogłem uzyskać pracując w moim projekcie PCL. myśląc o budowaniu klienta REST na nim ..... – skhro87

+0

To jest niesamowite! Nie jestem osobiście zbyt doświadczony w C# i PCL w ogóle, więc czy jest ktoś, kto mógłby mi powiedzieć, jak powinienem obsłużyć typ zwrotu "resultAction"?Muszę uzyskać dostęp do "ResultString" poza metodą "Pobierz", aby przeanalizować odpowiedź, którą otrzymałem. Z góry dziękuję. – Demitrian

Powiązane problemy