Arbeiten Sie mit dem SOAP-Dienst in der Windows Phone 8.1-Anwendung

Mit der Veröffentlichung von Windows Phone 8.1 hat sich eine neue Möglichkeit für die Entwicklung von Anwendungen für den Windows / Windows Phone Store mit einer gemeinsamen Codebasis ergeben. Hierbei handelt es sich um sogenannte generische Anwendungen, die auf einer allgemeineren API basieren und die Möglichkeit bieten, XAML-Markups in Visual Studio 2013 sofort wiederzuverwenden.

Wenn die Windows Store-Anwendung WCF für die Arbeit mit SOAP-Diensten verwendet, schlägt der Versuch, eine Portierung auf Windows Phone durchzuführen, möglicherweise fehl. Wie sich herausstellte, ist der System.ServiceModel-Namespace nicht mehr verfügbar. Dementsprechend ist ein Ersatz erforderlich, der die folgenden Anforderungen erfüllt:
  • Benutzerfreundlichkeit, ähnlich der alten Add Service Reference, bei der die Ausgabe der generierte Code eines stark typisierten Clientdienstes ist;
  • Wie die Praxis gezeigt hat, erfordert die Erweiterbarkeit möglicherweise die Unterstützung verschiedener Authentifizierungsschemata.


Eine SOAP- Anforderung ist ein speziell gestaltetes XML-Dokument. Sie müssen lediglich die Anforderungsdaten in XML serialisieren, in das Body-Element einfügen und in den Body der HTTP-POST-Anforderung senden. Die Struktur der Antwort ist ähnlich, das Ergebnis wird aus dem Body-Element erhalten.



Basierend auf HttpClient implementieren wir die Basisklasse zum Generieren der Anforderung. Als Ergebnis erhalten wir eine Funktion der folgenden Form:

public async Task CallAsync(string action, TRequest request)
{
	IHttpContent httpContent = GetHttpContent(action, request);
	var response = await Client.PostAsync(EndpointAddress, httpContent);
	var responseContent = await response.Content.ReadAsStringAsync();
	return GetResponse(responseContent);
}


Es bleiben nur die entsprechenden Klassen TRequest und TResponse zu ersetzen, die auf der Grundlage der Beschreibung des Dienstes erhalten werden können. SOAP-Dienste werden mit WSDL (Web Services Description Language ) beschrieben, einer Sprache, die die Dienst-API in Form von Vorgängen und Datentypen beschreibt.

Informationen über den Dienst können aus verschiedenen Blickwinkeln abgerufen werden:

  • Arbeiten Sie mit roher WSDL. Es ist möglich, aber für die anstehende Aufgabe werden wir den Weg des geringsten Widerstands besser beschreiten.
  • Die Verwendung der System.ServiceModel.Description.MetadataExchangeClient- Klasse ist die sinnvollste Option. Die Implementierung dieser Klasse ermöglicht jedoch nicht die Arbeit mit WSDL. Wenn das Dokument ein Importelement enthält , fällt MetadataExchangeClient mit einem Fehler aus.
  • Verwenden Sie das im .Net Framework SDK enthaltene SvcUtil- Konsolendienstprogramm . Bei der Ausgabe erhalten wir denselben Quellcode wie bei Verwendung der Add Service Reference von Visual Studio, die wir als Grundlage verwenden.


Der mit SvcUtil erhaltene Quellcode kann aufgrund der folgenden nicht unterstützten Designs nicht direkt für Windows Phone Store-Anwendungen verwendet werden:

  • Service-Client basierend auf System.ServiceModel.ClientBase. Использовать нельзя, но можно взять за основу интерфейс сервиса.
    Attributen System.SerializableAttributeund System.ComponentModel.DesignerCategoryAttribute. Diese Attribute werden nicht unterstützt, löschen.
    Von Eigenschaften public System.Xml.XmlElement[] Any { get; set; }. Ändern Sie den Typ in System.Xml.Linq.XElement[].

Jetzt auch beliebt: