Teilen über


Entwerfen und Implementieren von Diensten

In diesem Abschnitt erfahren Sie, wie Sie WCF-Verträge definieren und implementieren. Ein Dienstvertrag gibt an, was ein Endpunkt mit der Außenwelt kommuniziert. Auf einer konkreteren Ebene handelt es sich um eine Aussage über eine Reihe bestimmter Nachrichten, die in grundlegende Nachrichtenaustauschmuster (MEPs) organisiert sind, z. B. Anfrage/Antwort, Unidirektionale und Duplex. Wenn es sich bei einem Dienstvertrag um einen logischen Satz von Nachrichtenaustausch handelt, handelt es sich bei einem Dienstvorgang um einen einzelnen Nachrichtenaustausch. Ein Hello Vorgang muss offensichtlich eine Nachricht annehmen (damit der Anrufer die Begrüßung ankündigen kann) und kann abhängig von der Höflichkeit des Vorgangs eine Nachricht zurückgeben oder auch nicht.

Weitere Informationen zu Verträgen und anderen Kernkonzepten von Windows Communication Foundation (WCF) finden Sie unter Grundlegende Konzepte von Windows Communication Foundation. In diesem Thema geht es um das Verständnis von Serviceverträgen. Weitere Informationen zum Erstellen von Clients, die Dienstverträge für die Verbindung mit Diensten verwenden, finden Sie unter WCF Client Overview.

Überblick

Dieses Thema bietet eine allgemeine konzeptionelle Ausrichtung für das Entwerfen und Implementieren von WCF-Diensten. Unterthemen enthalten detailliertere Informationen zu den Besonderheiten von Design und Implementierung. Bevor Sie Ihre WCF-Anwendung entwerfen und implementieren, empfiehlt es sich, Folgendes zu beachten:

  • Verstehen, was ein Servicevertrag ist, wie er funktioniert und wie man einen vertrag erstellt.

  • Verstehen Sie, dass Verträge Mindestanforderungen angeben, die die Laufzeitkonfiguration oder die Hostingumgebung 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 Standort der Abläufe.

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

Beispielsweise kann ein Auftragsvertrag einen CreateOrder Vorgang haben, der eine Eingabe von Bestellinformationstypen akzeptiert und Erfolgs- oder Fehlerinformationen zurückgibt, einschließlich eines Auftragsbezeichners. Möglicherweise verfügt er auch über einen GetOrderStatus Vorgang, der einen Auftragsbezeichner akzeptiert und Bestellstatusinformationen zurückgibt. Ein Servicevertrag 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 Nachrichten übertragen können.

  4. Kategorisierte Aussagen über die Kommunikationsinfrastruktur, die zum erfolgreichen Verarbeiten der Nachrichten erforderlich ist. Diese Details umfassen beispielsweise, ob und welche Sicherheitsformen erforderlich sind, um eine erfolgreiche Kommunikation herzustellen.

Um diese Art von Informationen an andere Anwendungen auf vielen Plattformen (einschließlich nicht von Microsoft stammender Plattformen) zu vermitteln, werden XML-Serviceverträge öffentlich in Standard-XML-Formaten ausgedrückt, z. B. Web Services Description Language (WSDL) und XML-Schema (XSD ), unter anderem. Entwickler für viele Plattformen können diese Informationen für öffentliche Verträge verwenden, um Anwendungen zu erstellen, die mit dem Dienst kommunizieren können, da sie sowohl die Sprache der Spezifikation verstehen als auch, da diese Sprachen darauf ausgelegt sind, die Interoperabilität zu ermöglichen, indem die öffentlichen Formulare, Formate und Protokolle beschrieben werden, die der Dienst unterstützt. Weitere Informationen dazu, wie WCF diese Art von Informationen behandelt, finden Sie unter Metadaten.

Verträge können auf viele Arten ausgedrückt werden, und während WSDL und XSD hervorragende Sprachen sind, um Dienste auf barrierefreie Weise zu beschreiben, sind sie schwierig zu verwendende Sprachen und sind lediglich Beschreibungen eines Diensts, nicht dienstvertragsimplementierung. Daher verwenden WCF-Anwendungen verwaltete Attribute, Schnittstellen und Klassen, um die Struktur eines Diensts zu definieren und zu implementieren.

Der in verwalteten Typen definierte Vertrag kann bei Bedarf von Clients oder anderen Dienstimplementierungen als Metadaten (WSDL und XSD) exportiert werden. Das Ergebnis ist ein einfaches Programmiermodell, das (mithilfe öffentlicher Metadaten) für jede Clientanwendung beschrieben werden kann. Die Details der zugrunde liegenden SOAP-Nachrichten, der Transport- und Sicherheitsinformationen usw. können wcf überlassen werden, wodurch die erforderlichen Konvertierungen in und vom Dienstvertragssystem automatisch in das XML-Typsystem ausgeführt werden.

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

Nachrichten im Mittelpunkt

Die Verwendung von verwalteten Schnittstellen, Klassen und Methoden zur Modellierung von Dienstvorgängen ist einfach, wenn Sie mit Methodensignaturen im Stil von Remote-Prozeduraufrufen (RPC) vertraut sind. Dabei besteht die normale Form des Anforderns von Funktionalität darin, Parameter an eine Methode zu übergeben und Rückgabewerte zu empfangen, sei es von einem Objekt oder einer anderen Art von Code. Beispielsweise können Programmierer, die verwaltete Sprachen wie Visual Basic und C++ COM verwenden, ihr Wissen über den RPC-Stil-Ansatz (unabhängig davon, ob Objekte oder Schnittstellen verwenden) auf die Erstellung von WCF-Dienstverträgen anwenden, ohne dass die Probleme auftreten, die in verteilten RPC-Objektsystemen auftreten. Die Dienstausrichtung bietet die Vorteile von lose gekoppelter, nachrichtenorientierter Programmierung und behält gleichzeitig die Leichtigkeit und Vertrautheit der RPC-Programmiererfahrung bei.

Viele Programmierer sind mit nachrichtenorientierten Anwendungsprogrammierschnittstellen vertraut, z. B. Nachrichtenwarteschlangen wie Microsoft MSMQ, die System.Messaging Namespaces im .NET Framework oder das Senden unstrukturierter XML in HTTP-Anforderungen, um einige zu nennen. Weitere Informationen zur Programmierung auf Nachrichtenebene finden Sie unter Verwenden von Nachrichtenverträgen, Dienst Channel-Level Programmierung und Interoperabilität mit POX-Anwendungen.

Grundlegendes zur Hierarchie der Anforderungen

Ein Servicevertrag gruppiert die Vorgänge; gibt das Nachrichtenaustauschmuster, Nachrichtentypen und Datentypen an, die diese Nachrichten übertragen; und gibt Kategorien des Laufzeitverhaltens an, für die eine Implementierung den Vertrag unterstützen muss (z. B. kann es erforderlich sein, dass Nachrichten verschlüsselt und signiert werden). Der Servicevertrag selbst gibt nicht genau an, wie diese Anforderungen erfüllt werden, nur, dass sie sein müssen. Der Verschlüsselungstyp oder die Art, in der eine Nachricht signiert ist, gilt für die Implementierung und Konfiguration eines kompatiblen Diensts.

Beachten Sie, dass der Vertrag bestimmte Anforderungen an die Implementierung des Dienstvertrags und die Laufzeitkonfiguration stellt, um das Verhalten anzupassen. Die Gruppe der Anforderungen, die erfüllt werden müssen, um einen Dienst für die Verwendung verfügbar zu machen, basiert auf der vorherigen Gruppe von Anforderungen. Wenn ein Vertrag Anforderungen an die Implementierung vorschreibt, kann eine Implementierung noch mehr Konfiguration und Bindungen erfordern, mit denen der Dienst ausgeführt werden kann. Schließlich muss die Hostanwendung auch alle Anforderungen unterstützen, die von der Dienstkonfiguration und Bindungen hinzugefügt werden.

Dieser additive Anforderungsprozess ist wichtig, um beim Entwerfen, Implementieren, Konfigurieren und Hosten einer Windows Communication Foundation (WCF)-Dienstanwendung zu berücksichtigen. Beispielsweise kann der Vertrag angeben, dass er eine Sitzung unterstützen muss. Wenn ja, müssen Sie die Bindung so konfigurieren, dass diese vertragliche Anforderung unterstützt wird, oder die Dienstimplementierung funktioniert nicht. Oder wenn Ihr Dienst die integrierte Windows-Authentifizierung erfordert und in Internetinformationsdienste (Internet Information Services, IIS) gehostet wird, muss die Webanwendung, in der sich der Dienst befindet, über die integrierte Windows-Authentifizierung verfügen und anonyme Unterstützung deaktiviert ist. Weitere Informationen zu den Features und Auswirkungen der verschiedenen Diensthostanwendungstypen finden Sie unter Hostingdienste.

Siehe auch