Freigeben über


Grundlegende Konzepte von Windows Communication Foundation

Dieses Dokument bietet eine allgemeine Übersicht über die Windows Communication Foundation (WCF)-Architektur. Es soll wichtige Konzepte und deren Zusammenpassen erläutert werden. Ein Lernprogramm zum Erstellen der einfachsten Version eines WCF-Diensts und Clients finden Sie im Lernprogramm "Erste Schritte". Informationen zur WCF-Programmierung finden Sie unter "Grundlegende WCF-Programmierung".

WCF-Grundlagen

WCF ist eine Laufzeit und eine Reihe von APIs zum Erstellen von Systemen, die Nachrichten zwischen Diensten und Clients senden. Die gleiche Infrastruktur und APIs werden verwendet, um Anwendungen zu erstellen, die mit anderen Anwendungen auf demselben Computersystem oder auf einem System kommunizieren, das sich in einem anderen Unternehmen befindet und über das Internet aufgerufen wird.

Messaging und Endpunkte

WCF basiert auf dem Konzept der nachrichtenbasierten Kommunikation, und alles, was als Nachricht modelliert werden kann (z. B. eine HTTP-Anforderung oder eine Message Queuing -Nachricht (auch als MSMQ bezeichnet) kann auf einheitliche Weise im Programmiermodell dargestellt werden. Dies ermöglicht eine einheitliche API über verschiedene Transportmechanismen hinweg.

Das Modell unterscheidet zwischen Clients, bei denen es sich um Anwendungen handelt, die kommunikation initiieren, und Dienste, bei denen es sich um Anwendungen handelt, die darauf warten, dass Clients mit ihnen kommunizieren und auf diese Kommunikation reagieren. Eine einzelne Anwendung kann sowohl als Client als auch als Dienst fungieren. Beispiele finden Sie unter Duplexdienste und Peer-to-Peer-Netzwerk.

Nachrichten werden zwischen Endpunkten gesendet. Endpunkte sind Orte, an denen Nachrichten gesendet oder empfangen werden (oder beides), und sie definieren alle informationen, die für den Nachrichtenaustausch erforderlich sind. Ein Dienst macht einen oder mehrere Anwendungsendpunkte (sowie null oder mehr Infrastrukturendpunkte) verfügbar, und der Client generiert einen Endpunkt, der mit einem der Endpunkte des Diensts kompatibel ist.

Ein Endpunkt beschreibt auf standardbasierte Weise, wo Nachrichten gesendet werden sollen, wie sie gesendet werden sollen und wie die Nachrichten aussehen sollen. Ein Dienst kann diese Informationen als Metadaten verfügbar machen, die Clients verarbeiten können, um geeignete WCF-Clients und Kommunikationsstapel zu generieren.

Kommunikationsprotokolle

Ein erforderliches Element des Kommunikationsstapels ist das Transportprotokoll. Nachrichten können über Intranets und das Internet mit allgemeinen Transporten wie HTTP und TCP gesendet werden. Andere Transporte sind enthalten, die die Kommunikation mit Message Queuing-Anwendungen und Knoten in einem Peer-Netzwerk-Mesh unterstützen. Weitere Transportmechanismen können mithilfe der integrierten Erweiterungspunkte von WCF hinzugefügt werden.

Ein weiteres erforderliches Element im Kommunikationsstapel ist die Codierung, die angibt, wie eine bestimmte Nachricht formatiert wird. WCF stellt die folgenden Codierungen bereit:

  • Textcodierung, eine interoperable Codierung.

  • Die MTOM-Codierung (Message Transmission Optimization Mechanism) ist eine interoperable Methode zum effizienten Senden unstrukturierter Binärdaten an und von einem Dienst.

  • Binäre Codierung für eine effiziente Übertragung.

Weitere Codierungsmechanismen (z. B. eine Komprimierungscodierung) können mithilfe der integrierten Erweiterungspunkte von WCF hinzugefügt werden.

Nachrichtenmuster

WCF unterstützt mehrere Messagingmuster, einschließlich Anfrage-Antwort, eindirektionaler und Duplexkommunikation. Verschiedene Transporte unterstützen unterschiedliche Messagingmuster und wirken sich somit auf die Arten von Interaktionen aus, die sie unterstützen. Die WCF-APIs und -Laufzeit helfen Ihnen auch, Nachrichten sicher und zuverlässig zu senden.

WCF-Begriffe

Weitere Konzepte und Begriffe, die in der WCF-Dokumentation verwendet werden, sind die folgenden:

Meldung
Eine eigenständige Dateneinheit, die aus mehreren Teilen bestehen kann, einschließlich eines Textkörpers und kopfzeilen.

Dienstleistung
Ein Konstrukt, das einen oder mehrere Endpunkte verfügbar macht, wobei jeder Endpunkt einen oder mehrere Dienstvorgänge verfügbar macht.

Endpunkt
Ein Konstrukt, bei dem Nachrichten gesendet oder empfangen werden (oder beides). Es umfasst einen Ort (eine Adresse), der definiert, wo Nachrichten gesendet werden können, eine Spezifikation des Kommunikationsmechanismus (eine Bindung), die beschreibt, wie Nachrichten gesendet werden sollen, und eine Definition für eine Reihe von Nachrichten, die an diesem Ort (einem Servicevertrag) gesendet oder empfangen werden können (oder beides), die beschreibt, welche Nachricht gesendet werden kann.

Ein WCF-Dienst wird für die Welt als Sammlung von Endpunkten verfügbar gemacht.

Anwendungsendpunkt
Ein Endpunkt, der von der Anwendung verfügbar gemacht wird und einem dienstvertrag entspricht, der von der Anwendung implementiert wird.

Infrastrukturendpunkt
Ein Endpunkt, der von der Infrastruktur verfügbar gemacht wird, um funktionen zu erleichtern, die vom Dienst benötigt oder bereitgestellt werden, der sich nicht auf einen Dienstvertrag bezieht. Beispielsweise kann ein Dienst über einen Infrastrukturendpunkt verfügen, der Metadateninformationen bereitstellt.

Adresse
Gibt den Speicherort an, an dem Nachrichten empfangen werden. Sie wird als Uniform Resource Identifier (URI) angegeben. Der URI-Schemateil benennt den Transportmechanismus, der verwendet werden soll, um die Adresse zu erreichen, z. B. HTTP und TCP. Der hierarchische Teil des URI enthält einen eindeutigen Speicherort, dessen Format vom Transportmechanismus abhängig ist.

Mit der Endpunktadresse können Sie eindeutige Endpunktadressen für jeden Endpunkt in einem Dienst erstellen oder unter bestimmten Bedingungen eine Adresse für alle Endpunkte freigeben. Das folgende Beispiel zeigt eine Adresse mit dem HTTPS-Protokoll mit einem nicht standardmäßigen Port:

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

Verbindlich
Definiert, wie ein Endpunkt mit der Welt kommuniziert. Es wird aus einer Reihe von Komponenten erstellt, die als Bindungselemente bezeichnet werden, die eines auf das andere "stapeln", um die Kommunikationsinfrastruktur aufzubauen. Zumindest definiert eine Bindung den Transport (z. B. HTTP oder TCP) und die verwendete Codierung (z. B. Text oder Binärdatei). Eine Bindung kann Bindungselemente enthalten, die Details wie die Sicherheitsmechanismen angeben, die zum Sichern von Nachrichten verwendet werden, oder das nachrichtenmuster, das von einem Endpunkt verwendet wird. Weitere Informationen finden Sie unter Konfigurieren von Diensten.

Binding-Element
Stellt einen bestimmten Teil der Bindung dar, z. B. ein Transport, eine Codierung, eine Implementierung eines Protokolls auf Infrastrukturebene (z. B. WS-ReliableMessaging) oder eine andere Komponente des Kommunikationsstapels.

Verhaltensweisen
Eine Komponente, die verschiedene Laufzeitaspekte eines Diensts, eines Endpunkts, eines bestimmten Vorgangs oder eines Clients steuert. Verhalten werden nach Bereich gruppiert: Allgemeine Verhaltensweisen wirken sich global auf alle Endpunkte aus, Dienstverhalten wirkt sich nur auf dienstbezogene Aspekte aus, Endpunktverhalten wirkt sich nur auf endpunktbezogene Eigenschaften und Verhalten auf Vorgangsebene auf bestimmte Vorgänge aus. Eine Verhaltensweise eines Dienstes ist die Drosselung, die angibt, wie ein Dienst reagiert, wenn ein Überschuss an Nachrichten droht, seine Verarbeitungsfähigkeiten zu überwältigen. Ein Endpunktverhalten steuert dagegen nur Aspekte, die für Endpunkte relevant sind, z. B. wie und wo eine Sicherheitsanmeldeinformation gefunden werden soll.

Vom System bereitgestellte Bindungen
WCF enthält eine Reihe von vom System bereitgestellten Bindungen. Dies sind Sammlungen von Bindungselementen, die für bestimmte Szenarien optimiert sind. Das WSHttpBinding ist beispielsweise dafür ausgelegt, die Interoperabilität mit Diensten zu ermöglichen, die verschiedene WS-*-Spezifikationen implementieren. Diese vordefinierten Bindungen sparen Zeit, indem nur die Optionen präsentiert werden, die auf das jeweilige Szenario korrekt angewendet werden können. Wenn eine vordefinierte Bindung Ihre Anforderungen nicht erfüllt, können Sie eine eigene benutzerdefinierte Bindung erstellen.

Konfiguration im Vergleich zur Codierung
Die Steuerung einer Anwendung kann entweder durch Codierung, konfiguration oder durch eine Kombination aus beiden erfolgen. Die Konfiguration hat den Vorteil, dass eine andere Person als der Entwickler (z. B. ein Netzwerkadministrator) Client- und Dienstparameter festlegen kann, nachdem der Code geschrieben wurde und ohne erneut kompiliert werden muss. Die Konfiguration ermöglicht nicht nur das Festlegen von Werten wie Endpunktadressen, sondern auch die weitere Kontrolle, indem Sie Endpunkte, Bindungen und Verhaltensweisen hinzufügen können. Mit der Codierung kann der Entwickler strenge Kontrolle über alle Komponenten des Diensts oder Clients behalten, und alle Einstellungen, die über die Konfiguration durchgeführt werden, können überprüft und bei Bedarf vom Code außer Kraft gesetzt werden.

Dienstvorgang
Eine Prozedur, die im Code eines Diensts definiert ist, der die Funktionalität für einen Vorgang implementiert. Dieser Vorgang wird den Clients als Methoden eines WCF-Clients zur Verfügung gestellt. Die Methode kann einen Wert zurückgeben und eine optionale Anzahl von Argumenten annehmen oder keine Argumente annehmen und keine Antwort zurückgeben. Beispielsweise kann ein Vorgang, der als einfaches "Hello" fungiert, als Benachrichtigung über die Anwesenheit eines Clients und zum Starten einer Reihe von Vorgängen verwendet werden.

Servicevertrag
Verbindet mehrere verwandte Vorgänge mit einer einzigen funktionalen Einheit. Der Vertrag kann Einstellungen auf Dienstebene definieren, z. B. den Namespace des Diensts, einen entsprechenden Rückrufvertrag und andere solche Einstellungen. In den meisten Fällen wird der Vertrag definiert, indem eine Schnittstelle in der Programmiersprache Ihrer Wahl erstellt und das ServiceContractAttribute Attribut auf die Schnittstelle angewendet wird. Der tatsächliche Dienstcode ergibt sich aus der Implementierung der Schnittstelle.

Betriebsvertrag
Ein Vorgangsvertrag definiert die Parameter und den Rückgabetyp eines Vorgangs. Beim Erstellen einer Schnittstelle, die den Dienstvertrag definiert, unterzeichnen Sie einen Vorgangsvertrag, indem Sie das OperationContractAttribute Attribut auf jede Methodendefinition anwenden, die Teil des Vertrags ist. Die Vorgänge können so modelliert werden, dass eine einzelne Nachricht verwendet und eine einzelne Nachricht zurückgegeben wird, oder sie können eine Reihe von Typen verwenden und einen Typ zurückgeben. Im letzteren Fall bestimmt das System das Format für die Nachrichten, die für diesen Vorgang ausgetauscht werden müssen.

Nachrichtenvertrag
Beschreibt das Format einer Nachricht. Beispielsweise wird festgelegt, ob Nachrichtenelemente in Kopfzeilen oder im Hauptteil der Nachricht platziert werden sollen, welche Sicherheitsstufe auf welche Elemente der Nachricht angewendet werden soll, und so weiter.

Fehlervertrag
Kann einem Dienstvorgang zugeordnet werden, um Fehler anzuzeigen, die an den Aufrufer zurückgegeben werden können. Einem Vorgang können keine oder mehrere Fehler zugeordnet werden. Bei diesen Fehlern handelt es sich um SOAP-Fehler, die als Ausnahmen im Programmiermodell modelliert werden.

Datenvertrag
Die Beschreibungen in Metadaten der Datentypen, die ein Dienst verwendet. Auf diese Weise können andere Personen mit dem Dienst zusammenarbeiten. Die Datentypen können in einem beliebigen Teil einer Nachricht verwendet werden, z. B. als Parameter oder Rückgabetypen. Wenn der Dienst nur einfache Typen verwendet, ist es nicht erforderlich, Datenverträge explizit zu verwenden.

Hosting
Ein Dienst muss in einem bestimmten Prozess gehostet werden. Ein Host ist eine Anwendung, die die Lebensdauer des Diensts steuert. Dienste können selbst gehostet oder von einem vorhandenen Hostingprozess verwaltet werden.

Selbst gehosteter Dienst
Ein Dienst, der in einer Prozessanwendung ausgeführt wird, die der Entwickler erstellt hat. Der Entwickler steuert seine Lebensdauer, legt die Eigenschaften des Diensts fest, öffnet den Dienst (der ihn in einen Überwachungsmodus festlegt) und schließt den Dienst.

Hostingprozess
Eine Anwendung, die zum Hosten von Diensten entwickelt wurde. Dazu gehören Internetinformationsdienste (INTERNET Information Services, IIS), Windows Activation Services (WAS) und Windows-Dienste. In diesen gehosteten Szenarien steuert der Host die Lebensdauer des Diensts. Beispielsweise können Sie mithilfe von IIS ein virtuelles Verzeichnis einrichten, das die Dienstassembly und die Konfigurationsdatei enthält. Wenn eine Nachricht empfangen wird, startet IIS den Dienst und steuert seine Lebensdauer.


Ein Dienst hat ein Instanzierungsmodell. Es gibt drei Instancing-Modelle: "single", in denen ein einzelnes CLR-Objekt alle Clients bedient; pro Anruf", in dem ein neues CLR-Objekt erstellt wird, um jeden Clientaufruf zu verarbeiten; und "pro Sitzung", in der eine Gruppe von CLR-Objekten erstellt wird, eine für jede separate Sitzung. Die Wahl eines Instancing-Modells hängt von den Anwendungsanforderungen und dem erwarteten Verwendungsmuster des Diensts ab.

Clientanwendung
Ein Programm, das Nachrichten mit einem oder mehreren Endpunkten austauscht. Die Clientanwendung beginnt mit dem Erstellen einer Instanz eines WCF-Clients und aufrufen von Methoden des WCF-Clients. Es ist wichtig zu beachten, dass eine einzelne Anwendung sowohl ein Client als auch ein Dienst sein kann.

Kanal
Eine konkrete Implementierung eines Bindungselements. Die Bindung stellt die Konfiguration dar, und der Kanal ist die Implementierung, die dieser Konfiguration zugeordnet ist. Daher gibt es einen Kanal, der jedem Bindungselement zugeordnet ist. Kanäle stapeln sich übereinander, um die konkrete Implementierung der Bindung zu erstellen: der Kanalstapel.

WCF-Client
Ein Clientanwendungskonstrukt, das die Dienstvorgänge als Methoden verfügbar macht (in der .NET Framework-Programmiersprache Ihrer Wahl, z. B. Visual Basic oder Visual C#). Jede Anwendung kann einen WCF-Client hosten, einschließlich einer Anwendung, die einen Dienst hosten soll. Daher ist es möglich, einen Dienst zu erstellen, der WCF-Clients anderer Dienste enthält.

Ein WCF-Client kann automatisch mithilfe des ServiceModel Metadata Utility Tools (Svcutil.exe) generiert werden, indem man es auf einen ausgeführten Dienst verweist, der Metadaten veröffentlicht.

Metadaten
In einem Dienst werden die Merkmale des Diensts beschrieben, die eine externe Entität verstehen muss, um mit dem Dienst zu kommunizieren. Metadaten können vom ServiceModel Metadata Utility Tool (Svcutil.exe) verwendet werden, um einen WCF-Client und die zugehörige Konfiguration zu generieren, die eine Clientanwendung für die Interaktion mit dem Dienst verwenden kann.

Die vom Dienst verfügbar gemachten Metadaten umfassen XML-Schemadokumente, die den Datenvertrag des Diensts definieren, und WSDL-Dokumente, die die Methoden des Diensts beschreiben.

Wenn diese Option aktiviert ist, werden Metadaten für den Dienst automatisch von WCF generiert, indem der Dienst und seine Endpunkte überprüft werden. Um Metadaten aus einem Dienst zu veröffentlichen, müssen Sie das Metadatenverhalten explizit aktivieren.

Sicherheit
In WCF umfasst Vertraulichkeit (Verschlüsselung von Nachrichten zur Verhinderung von Lauschangriffen), Integrität (die Mittel zur Erkennung von Manipulationen mit der Nachricht), Authentifizierung (mittel für die Überprüfung von Servern und Clients) und Autorisierung (die Kontrolle des Zugriffs auf Ressourcen). Diese Funktionen werden entweder durch Die Nutzung vorhandener Sicherheitsmechanismen bereitgestellt, z. B. TLS über HTTP (auch als HTTPS bezeichnet), oder durch Implementieren einer oder mehrerer der verschiedenen WS-*-Sicherheitsspezifikationen.

Transportsicherheitsmodus
Gibt an, dass Vertraulichkeit, Integrität und Authentifizierung durch die Transportschichtmechanismen (z. B. HTTPS) bereitgestellt werden. Bei der Verwendung eines Transports wie HTTPS hat dieser Modus den Vorteil, dass er effizient in seiner Leistung ist und aufgrund seiner Verbreitung im Internet gut verstanden wird. Der Nachteil besteht darin, dass diese Art von Sicherheit auf jedem Hop im Kommunikationspfad separat angewendet wird, wodurch die Kommunikation anfällig für eine Man-in-the-Middle-Attacke wird.

Nachrichtensicherheitsmodus
Gibt an, dass die Sicherheit durch Implementieren einer oder mehrerer Sicherheitsspezifikationen bereitgestellt wird, z. B. die Spezifikation mit dem Namen Web Services Security: SOAP Message Security. Jede Nachricht enthält die erforderlichen Mechanismen, um während der Übertragung Sicherheit bereitzustellen, und den Empfängern zu ermöglichen, Manipulationen zu erkennen und die Nachrichten zu entschlüsseln. In diesem Sinne ist die Sicherheit in jede Nachricht integriert und bietet End-to-End-Sicherheit über mehrere Stationen hinweg. Da Sicherheitsinformationen Teil der Nachricht werden, ist es auch möglich, mehrere Arten von Anmeldeinformationen in die Nachricht einzuschließen (diese werden als Ansprüche bezeichnet). Dieser Ansatz hat auch den Vorteil, dass die Nachricht sicher über jeden Transport, einschließlich mehrerer Transporte zwischen Dem Ursprung und Ziel, reisen kann. Der Nachteil dieses Ansatzes ist die Komplexität der verwendeten kryptografischen Mechanismen, was zu Leistungsauswirkungen führt.

Übertragung im Nachrichtenauthentifizierungsmodus
Gibt die Verwendung der Transportschicht an, um Vertraulichkeit, Authentifizierung und Integrität der Nachrichten bereitzustellen, während jede der Nachrichten mehrere Anmeldeinformationen (Ansprüche) enthalten kann, die von den Empfängern der Nachricht benötigt werden.

WS-*
Kurzform für die wachsende Gruppe von Webdienstspezifikationen (WS), z. B. WS-Security, WS-ReliableMessaging usw., die in WCF implementiert werden.

Siehe auch