Objektmodell für WCF-Webprogrammierung
Das HTTP-Webprogrammierungsmodell ermöglicht Entwicklern, Windows Communication Foundation (WCF)-Webdienste durch grundlegende HTTP-Anforderungen ohne SOAP verfügbar zu machen. Das HTTP-Webprogrammierungsmodell wird zusätzlich zum vorhandenen WCF-Erweiterbarkeitsmodell erstellt. Mit diesem Modell werden folgende Klassen definiert:
Programmiermodell:
Kanäle und Verteilerinfrastruktur:
Dienstprogrammklassen und Erweiterungspunkte:
WebGetAttribute
Das WebGetAttribute-Attribut wird dazu verwendet, einen Dienstvorgang als einen Vorgang zu kennzeichnen, der auf HTTP GET-Anforderungen reagiert. Es handelt sich um ein passives Vorgangsverhalten (von den IOperationBehavior-Methoden werden keine Aktionen ausgeführt), durch das der Vorgangsbeschreibung Metadaten hinzugefügt werden. Die Anwendung von WebGetAttribute hat nur dann Auswirkungen, wenn ein Verhalten, das in der Vorgangsbeschreibung nach diesen Metadaten sucht (insbesondere WebHttpBehavior), der Verhaltensauflistung des Diensts hinzugefügt wird. Das WebGetAttribute-Attribut verwendet die in der folgenden Tabelle beschriebenen optionalen Parameter.
Parameter | Beschreibung |
---|---|
BodyStyle |
Steuert, ob Anforderungen und Antworten, die an den Dienstvorgang, auf den das Attribut angewendet wird, gesendet oder von diesem empfangen werden, umschlossen werden. |
RequestFormat |
Steuert die Formatierung von Anforderungsnachrichten. |
ResponseFormat |
Steuert die Formatierung von Antwortnachrichten. |
UriTemplate |
Gibt die URI-Vorlage an, mit der gesteuert wird, welche GET-Anforderungen dem Dienstvorgang zugeordnet werden, auf den das Attribut angewendet wird. |
WebHttpBinding
Die WebHttpBinding bietet mit dem WebMessageEncodingBindingElement Unterstützung für XML-, JSON- und unformatierte Binärdaten. Das Element besteht aus HttpsTransportBindingElement, HttpTransportBindingElement und einem WebHttpSecurity-Objekt. Die WebHttpBinding wurde so konzipiert, dass sie in Verbindung mit WebHttpBehavior verwendet werden kann.
WebInvokeAttribute
Das WebInvokeAttribute-Attribut ist vergleichbar mit WebGetAttribute, wird jedoch dazu verwendet, einen Dienstvorgang als einen Vorgang zu kennzeichnen, der auf andere HTTP-Anforderungen als GET antwortet. Es handelt sich um ein passives Vorgangsverhalten (von den IOperationBehavior-Methoden werden keine Aktionen ausgeführt), durch das der Vorgangsbeschreibung Metadaten hinzugefügt werden. Die Anwendung von WebInvokeAttribute hat nur dann Auswirkungen, wenn ein Verhalten, das in der Vorgangsbeschreibung nach diesen Metadaten sucht (insbesondere WebHttpBehavior), der Verhaltensauflistung des Diensts hinzugefügt wird.
Das WebGetAttribute-Attribut verwendet die in der folgenden Tabelle beschriebenen optionalen Parameter.
Parameter | Beschreibung |
---|---|
BodyStyle |
Steuert, ob Anforderungen und Antworten, die an den Dienstvorgang, auf den das Attribut angewendet wird, gesendet oder von diesem empfangen werden, umschlossen werden. |
Method |
Gibt die HTTP-Methode an, der der Dienstvorgang zugeordnet wird. |
RequestFormat |
Steuert die Formatierung von Anforderungsnachrichten. |
ResponseFormat |
Steuert die Formatierung von Antwortnachrichten. |
UriTemplate |
Gibt die URI-Vorlage an, mit der gesteuert wird, welche GET-Anforderungen dem Dienstvorgang zugeordnet werden, auf den das Attribut angewendet wird. |
UriTemplate
Mit der UriTemplate-Klasse können Sie einen Satz strukturell ähnlicher URIs definieren. Vorlagen bestehen aus zwei Teilen, einem Pfad und einer Abfrage. Ein Pfad besteht aus einer Reihe von Segmenten, die durch einen Schrägstrich (/) getrennt werden. Jedes Segment kann über einen Literalwert, einen Variablenwert (wird in geschweiften Klammern [{ }] geschrieben und ist entsprechend dem Inhalt genau eines Segments beschränkt) oder einen Platzhalter verfügen (wird als Sternchen [*] geschrieben, das dem "Rest des Pfads" entspricht), der am Ende des Pfads angezeigt werden muss. Der Abfrageausdruck kann vollständig weggelassen werden. Sofern der Abfrageausdruck vorhanden ist, wird eine ungeordnete Reihe von Namen- und Wertpaaren angegeben. Bei den Elementen des Abfrageausdrucks kann es sich entweder um literale Paare (? x=2) oder variable Paare (? x = {Wert}) handeln. Alleinstehende Werte sind nicht zulässig. UriTemplate wird intern vom WCF-Webprogrammierungsmodell verwendet, um Dienstvorgängen bestimmte URIs oder Gruppen von URIs zuzuordnen.
UriTemplateTable
Die UriTemplateTable-Klasse stellt einen assoziativen Satz von UriTemplate-Objekten dar, die an ein Objekt nach Wahl des Entwicklers gebunden sind. Mit dieser Klasse werden Kandidaten-URIs (Uniform Resource Identifiers) mit den Vorlagen im Satz abgeglichen und die den übereinstimmenden Vorlagen zugeordneten Daten abgerufen. UriTemplateTable wird intern vom WCF-Webprogrammierungsmodell verwendet, um bestimmte URIs oder Gruppen von URIs Dienstvorgängen zuzuordnen.
WebServiceHost
WebServiceHost erweitert ServiceHost, um das Hosten eines Nicht-SOAP-Webdiensts zu vereinfachen. Werden von WebServiceHost in der Dienstbeschreibung keine Endpunkte gefunden, wird automatisch ein Standardendpunkt an der Basisadresse des Diensts erstellt. Beim Erstellen eines standardmäßigen HTTP-Endpunkts deaktiviert WebServiceHost auch die HTTP-Hilfeseite und die GET-Funktion von Web Services Description Language (WSDL), damit der Metadatenendpunkt nicht in Konflikt mit dem standardmäßigen HTTP-Endpunkt gerät. Von WebServiceHost wird zudem gewährleistet, dass an alle Endpunkte, die WebHttpBinding verwenden, das erforderliche WebHttpBehavior angehängt ist. Zuletzt konfiguriert WebServiceHost automatisch die Bindung des Endpunkts für die Kooperation mit den entsprechenden Sicherheitseinstellungen für Internetinformationsdienste (IIS), wenn sie in einem sicheren virtuellen Verzeichnis verwendet wird.
WebServiceHostFactory
Die WebServiceHostFactory-Klasse wird dazu verwendet, dynamisch einen WebServiceHost zu erstellen, wenn ein Dienst unter Internetinformationsdienste (IIS) oder Windows Process Activation Service (WAS) gehostet wird. Im Gegensatz zu einem selbst gehosteten Dienst, bei dem WebServiceHost von der Hostanwendung instanziiert wird, erstellen unter IIS oder WAS gehostete Dienste mithilfe dieser Klasse den WebServiceHost für den Dienst. Die CreateServiceHost-Methode wird aufgerufen, wenn eine eingehende Anforderung für den Dienst empfangen wird.
WebHttpBehavior
WebHttpBehavior stellt die erforderlichen Formatierungsprogramme, Vorgangsselektoren usw. bereit, die für die Unterstützung von Webdiensten auf der Dienstmodellebene erforderlich sind. Dieses Verhalten wird als Endpunktverhalten implementiert (das in Verbindung mit der WebHttpBinding verwendet wird) und ermöglicht die Angabe von Formatierungsprogrammen und Vorgangsselektoren für jeden Endpunkt, sodass von derselben Dienstimplementierung sowohl SOAP- als auch POX-Endpunkte verfügbar gemacht werden können.
Erweitern von WebHttpBehavior
WebHttpBehavior ist durch eine Reihe von virtuellen Methoden erweiterbar: GetOperationSelector, GetReplyClientFormatter, GetRequestClientFormatter, GetReplyDispatchFormatter und GetRequestDispatchFormatter. Entwickler können eine Klasse von WebHttpBehavior ableiten und diese Methoden überschreiben, um das Standardverhalten anzupassen.
WebScriptEnablingBehavior ist ein Beispiel für die Erweiterung von WebHttpBehavior. WebScriptEnablingBehavior ermöglicht Windows Communication Foundation (WCF)-Endpunkten den Empfang von HTTP-Anforderungen von einem browserbasierten ASP.NET AJAX-Client. Ein Beispiel für die Verwendung dieses Erweiterungspunkts finden Sie unter HTML Form Handler Sample.
WebHttpDispatchOperationSelector
WebHttpDispatchOperationSelector verwendet die UriTemplate-Klasse und die UriTemplateTable-Klasse, um Aufrufe an Dienstvorgänge zu senden.
Kompatibilität
Das WCF-Webprogrammierungsmodell verwendet keine SOAP-basierten Nachrichten und unterstützt daher nicht die WS-*-Protokolle. Sie können jedoch denselben Vertrag durch zwei verschiedene Endpunkte verfügbar machen, von denen einer im Gegensatz zum anderen SOAP verwendet. Ein Beispiel finden Sie unter Gewusst wie: Verfügbarmachen eines Vertrags für SOAP- und Webclients.
Siehe auch
Referenz
WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebHttpBehavior
WebHttpDispatchOperationSelector