Entwerfen und Implementieren von Diensten

In diesem Abschnitt wird erläutert, wie WCF-Verträge definiert und implementiert werden. Ein Dienstvertrag gibt an, was ein Endpunkt an die Außenwelt kommuniziert. Konkreter gesagt ist er ein Anweisung zu mehreren bestimmten Nachrichten, die in grundlegende Nachrichtenaustauschmuster aufgeteilt sind, wie Anforderung/Antwort, unidirektional und Duplex. Wenn ein Dienstvertrag ein logisch zusammengehöriger Satz von Vorgängen des Nachrichtenaustauschs ist, dann ist ein Dienstvorgang ein einzelner Nachrichtenaustausch. Beispielsweise muss ein Hello-Vorgang natürlich eine Nachricht annehmen (damit der Aufrufer den Gruß ankündigen kann) und kann dann eine Nachricht zurückgeben (je nach Verfügung des Vorgangs).

Weitere Informationen zu Verträgen und anderen zentralen Begriffen von Windows Communication Foundation (WCF) finden Sie unter Wesentliche Windows Communication Foundation-Begriffe. In diesem Thema werden in erster Linie Kenntnisse über Dienstverträge vermittelt. Weitere Informationen zum Erstellen von Clients, die Dienstverträge zur Herstellung einer Verbindung mit Diensten verwenden, finden Sie unter Übersicht über den WCF-Client.

Überblick

Dieses Thema bietet eine allgemeine Orientierung zum Entwerfen und Implementieren von WCF-Diensten. Untergeordnete Themen bieten ausführlichere Informationen zu den Besonderheiten des Entwerfens und Implementierens. Bevor Sie Ihre WCF-Anwendung entwerfen und implementieren, sollten Sie Folgendes beachten:

  • Kenntnisse darüber, was ein Dienstvertrag ist, wie er funktioniert und erstellt wird.

  • Kenntnisse darüber, dass Verträge Mindestanforderungen angeben, die die Laufzeitkonfiguration oder die Hostumgebung möglicherweise nicht unterstützen.

Dienstverträge

Ein Dienstvertrag gibt Folgendes an:

  • Die Vorgänge, die ein Vertrag verfügbar macht.

  • Die Signatur der Vorgänge in Bezug auf ausgetauschte Nachrichten.

  • Die Datentypen dieser Nachrichten.

  • Der Speicherort der Vorgänge.

  • Die spezifischen Protokolle und Serialisierungsformate, die verwendet werden, um die erfolgreiche Kommunikation mit dem Dienst zu unterstützen.

Beispielsweise kann ein Vertrag für eine Bestellung einen CreateOrder-Vorgang aufweisen, der eine Eingabe von Bestellinformationstypen annimmt und Erfolgs- oder Fehlerinformationen einschließlich einer Bestellnummer zurückgibt. Er kann auch einen GetOrderStatus-Vorgang aufweisen, der eine Bestellnummer annimmt und Bestellstatusinformationen zurückgibt. Ein Dienstvertrag dieser Art würde Folgendes angeben:

  1. Dass der Vertrag für die Bestellung aus CreateOrder- und GetOrderStatus-Vorgänge besteht.

  2. Dass die Vorgänge Eingabemeldungen und Ausgabemeldungen angegeben haben.

  3. Die Daten, die diese Meldungen enthalten können.

  4. Nach Kategorien geordnete Anweisungen zur für die erfolgreiche Verarbeitung der Meldungen erforderlichen Kommunikationsinfrastruktur. Beispielsweise schließen diese Details ein, ob und welche Formen von Sicherheit erforderlich sind, um eine erfolgreiche Kommunikation herzustellen.

Um diese Informationen anderen Anwendungen auf verschiedenen Plattformen (einschließlich Nicht-Microsoft-Plattformen) zu vermitteln, werden XML-Dienstverträge öffentlich in XML-Standardformaten ausgedrückt, u. a. in Web Services Description Language (WSDL) und XML Schema (XSD). Entwickler für viele Plattformen können mithilfe dieser öffentlichen Vertragsinformationen Anwendungen erstellen, die mit dem Dienst kommunizieren können, da sie die Sprache der Spezifikation verstehen und diese Sprachen für das Ermöglichen der Interoperation konzipiert sind, indem sie die öffentlichen Formulare, Formate und Protokolle beschreiben, die der Dienst unterstützt. Weitere Informationen darüber, wie diese Informationen von WCF verarbeitet werden, finden Sie unter Metadaten.

Verträge können auf verschiedene Weise ausgedrückt werden; WSDL und XSD sind zwar ausgezeichnete Sprachen zum Beschreiben von Diensten beim Zugriff, jedoch schwierige Sprachen bei der direkten Verwendung. Sie sind lediglich Beschreibungen eines Diensts und keine Dienstvertragsimplementierungen. Daher verwenden WCF-Anwendungen verwaltete Attribute, Schnittstellen und Klassen zum Definieren der Struktur eines Diensts und zum Implementieren dieses Diensts.

Der resultierende Vertrag, der in verwalteten Typen definiert ist, kann nach Bedarf durch Clients oder andere Dienstimplementierer als Metadaten – WSDL und XSD – exportiert werden. Das Ergebnis ist ein einfaches Programmiermodell, das (mit öffentlichen Metadaten) für jede Clientanwendung beschrieben werden kann. Die Details der zugrunde liegenden SOAP-Nachrichten, wie transport- und sicherheitsbezogene Informationen usw., können WCF überlassen werden, die die erforderlichen Konvertierungen zum und vom Dienstvertragstypsystem zum XML-Typsystem automatisch ausführt.

Weitere Informationen zum Entwerfen von Verträgen finden Sie unter Entwerfen von Dienstverträgen. Weitere Informationen zum Implementieren von Verträgen finden Sie unter Implementieren von Dienstverträgen.

Nachrichten im Mittelpunkt

Die Verwendung verwalteter Schnittstellen, Klassen und Methoden zur Modellierung von Dienstvorgängen ist unkompliziert, wenn Sie mit Methodensignaturen im RPC-Stil (Remote Procedure Call) vertraut sind. Bei dieser Methode stellt die Übergabe von Parametern an eine Methode und der Empfang der Rückgabewerte die normale Form dar, Funktionen von einem Objekt oder einem anderen Codetyp anzufordern. Programmierer, die beispielsweise verwaltete Sprachen wie Visual Basic und C++ COM verwenden, können ihre Kenntnisse des RPC-ähnlichen Ansatzes (ganz gleich, ob sie Objekte oder Schnittstellen verwenden) auf die Erstellung von WCF-Dienstverträgen anwenden, ohne dass sie mit den Problemen konfrontiert werden, für die verteilte RPC-Objektsysteme bekannt sind. Die Dienstausrichtung bietet den Vorteil lose gekoppelter, nachrichtenorientierter Programmierung, während gleichzeitig die Leichtigkeit und Vertrautheit der RPC-Programmiererfahrung erhalten bleibt.

Viele Programmierer fühlen sich mit nachrichtenorientierten Anwendungsprogrammierschnittstellen, beispielsweise mit Nachrichtenwarteschlangen wie Microsoft MSMQ, den System.Messaging-Namespaces im .NET Framework oder dem Senden unstrukturierter XML in HTTP-Anforderungen wohler. Weitere Informationen zur Programmierung auf Nachrichtenebene finden Sie unter Verwenden von Nachrichtenverträgen, Dienst-Kanalebenenprogrammierung und Interoperabilität mit POX-Anwendungen.

Grundlagen der Anforderungshierarchie

Ein Dienstvertrag gruppiert die Vorgänge, gibt das Nachrichtenaustauschmuster, die Nachrichtentypen und Datentypen an, die diese Nachrichten enthalten, und zeigt Kategorien von Laufzeitverhalten an, die eine Implementierung aufweisen muss, um den Vertrag zu unterstützen (z. B. dass Nachrichten verschlüsselt und signiert sein müssen). Der Dienstvertrag selbst gibt nicht genau an, wie diese Anforderungen erfüllt werden, sondern lediglich, dass sie erfüllt werden müssen. Welcher Verschlüsselungstyp verwendet wird oder wie eine Nachricht signiert wird, hängt von der Implementierung und Konfiguration eines kompatiblen Diensts ab.

Beachten Sie, dass der Vertrag bestimmte Anforderungen an die Dienstvertragsimplementierung und die Laufzeitkonfiguration stellt, um ein Verhalten hinzuzufügen. Die Anforderungen, um einen Dienst für die Verwendung verfügbar zu machen, bauen auf den vorherigen Anforderungen auf. Wenn ein Vertrag Anforderungen an die Implementierung stellt, kann eine Implementierung noch weitere Anforderungen an die Konfiguration und die Bindungen stellen, die die Ausführung des Dienstes ermöglichen. Außerdem muss die Hostanwendung auch alle Anforderungen unterstützen, die die Dienstkonfiguration und die Bindungen hinzufügen.

Beachten Sie unbedingt diesen zusätzlichen Anforderungsprozess beim Entwerfen, Implementieren, Konfigurieren und Hosten einer WCF-Dienstanwendung (Windows Communication Foundation). Beispielsweise kann der Vertrag angeben, dass er eine Sitzung unterstützen muss. In diesem Fall müssen Sie die Bindung so konfigurieren, dass sie diese Vertragsanforderung unterstützt, oder die Dienstimplementierung funktioniert nicht. Wenn der Dienst integrierte Windows-Authentifizierung erfordert und in Internetinformationsdiensten gehostet wird, muss für die Webanwendung, in der sich der Dienst befindet, die integrierte Windows-Authentifizierung aktiviert und der anonyme Support deaktiviert sein. Weitere Informationen zu den Funktionen und den Auswirkungen der verschiedenen Diensthost-Anwendungstypen finden Sie unter Hostingdienste.

Weitere Informationen