Det finns egentligen bara ett sätt att göra detta i C#/XAML och det är att använda sig av HttpClient. (Om man vill göra det i C++ så titta på detta exempel och JavaScript följande exempel.)
Innan vi går in på hur man använder HttpClient för REST så vill jag bara nämna att SOAP stöds också och att man kan använda sig av Add Service Reference som tidigare för att bygga upp en sådan tjänst. (Jag har inte det officiella svaret men det ser ut som att vi inte stödjer SOAP 1.2.)
HttpClient stödjer de verb som man förväntar sig att det skall finnas stöd för, inklusive GET, PUT, POST och DELETE. Alla anrop skickas asynkront och det finns stöd för att göra det på ett snyggt sätt i sin kod.
Förmågor (Capabilities)
I Windows 8 appar måste man beskriva vilka förmågor som en app skall ha. Det kan vara att appen behöver kameran eller rättigheter att använda nätverket. Det finns två förmågor som påverkar appens möjligheter att kommunicera med webbtjänster: Internet (Client) och Private Networks (Client & Server). Den förstnämnda är om webbtjänsten finns på det publika nätet och den andra är om tjänsten finns på ett privat nätverk.
Dessa finns beskrivna i Package.appxmanifest. Det finns en editor i Visual Studio för denna fil. Det är bara att dubbelklicka på filen för att starta editorn.
Mer information om detta finns här: How to configure network isolation capabilities.
Exempel
I detta enkla exempel vill jag visa hur man hämtar publik information om en facebookanvändare.
private async void getInformationFromFaceBook()
{
HttpClient _httpClient = new HttpClient();
HttpResponseMessage message =
await _httpClient.
GetAsync("https://graph.facebook.com/buzzfrog");
DataContractJsonSerializer dcjs =
new DataContractJsonSerializer(typeof(FaceBookUser));
var _faceBookUser = (FaceBookUser)dcjs.
ReadObject(await message.Content.ReadAsStreamAsync());
}
Det kan vara bra att sätta en header med user-agent. Vissa tjänster fungerar det utan medan andra kräver det.
Jag sätter MaxResponseContentBufferSize för att inte hur mycket som helst skall kunna komma tillbaka ifrån anropet.
Url:en https://graph.facebook.com/buzzfrog är min publika profil på Facebook.
Man får alltid tillbaka Json när man anropar Facebook. Av det skälet använder jag mig av DataContractJsonSerializer för att omvandla json-strängen till ett objekt av klassen FaceBookUser. (Läs mer i min blogginlägg På vilka sätt kan man spara en objektstruktur i Windows 8? om detta.)
FaceBookUser
[DataContract]
public class FaceBookUser
{
[DataMember(Name="name")]
public string Name;
[DataMember(Name="id")]
public string Id;
[DataMember(Name="gender")]
public string Gender;
[DataMember(Name="username")]
public string UserName;
}
Länkar
Quickstart: Connecting using HttpClient (Windows Store apps using C#/VB/C++ and XAML)
Facebook Graph API
Recent Comments