Objektmodell für WCF-Web-HTTP-Programmierung
Das WCF-WEB-HTTP-Programmiermodell ermöglicht es Entwicklern, Windows Communication Foundation (WCF)-Webdienste durch grundlegende HTTP-Anforderungen ohne SOAP verfügbar zu machen. Das WCF-WEB-HTTP-Programmiermodell basiert auf dem vorhandenen WCF-Erweiterbarkeitsmodell. Mit diesem Modell werden folgende Klassen definiert:
Programmiermodell:
Kanäle und Verteilerinfrastruktur:
Hilfsprogrammklassen und Erweiterungspunkte:
AspNetCacheProfileAttribute
AspNetCacheProfileAttribute gibt bei Anwendung auf einen Dienstvorgang das ASP.NET-Ausgabecacheprofil in der Konfigurationsdatei an, das zum Zwischenspeichern von Antworten aus dem Vorgang im ASP.NET-Ausgabecache verwendet werden soll. Diese Eigenschaft verwendet nur einen Parameter, den Cacheprofilnamen, der die Cacheeinstellungen in der Konfigurationsdatei angibt.
WebGetAttribute
Das WebGetAttribute-Attribut wird dazu verwendet, einen Dienstvorgang als 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 HTTP-Anforderungen dem Dienstvorgang zugeordnet werden, auf den das Attribut angewendet wird. |
WebHttpBinding
Die WebHttpBinding-Klasse 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 WebInvokeAttribute-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 (/) voneinander getrennt werden. Jedes Segment kann über einen Literalwert, einen Variablenwert (wird in geschweiften Klammern [{ }] angegeben und muss dem Inhalt genau eines Segments entsprechen) oder einen Platzhalter verfügen (wird als Sternchen [*] angegeben, das als "restlicher Pfad" interpretiert wird), der am Ende des Pfads stehen muss. Der Abfrageausdruck kann vollständig weggelassen werden. Sofern der Abfrageausdruck vorhanden ist, wird eine ungeordnete Reihe von Name-Wert-Paaren angegeben. Elemente des Abfrageausdrucks können entweder literale Paare (?x=2) oder Variablenpaare (?x={Wert}) sein. Alleinstehende Werte sind nicht zulässig. UriTemplate wird vom WCF-WEB-HTTP-Programmiermodell intern 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. Sie ermöglicht es Ihnen, mögliche URIs (Uniform Resource Identifiers) mit den Vorlagen im Satz abzugleichen und die den übereinstimmenden Vorlagen zugeordneten Daten abzurufen. UriTemplateTable wird vom WCF-WEB-HTTP-Programmiermodell intern verwendet, um Dienstvorgängen bestimmte URIs oder Gruppen von URIs 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 der 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(Type, Uri[])-Methode wird aufgerufen, wenn eine eingehende Anforderung für den Dienst empfangen wird.
WebHttpBehavior
Die WebHttpBehavior-Klasse 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(ServiceEndpoint), GetReplyClientFormatter(OperationDescription, ServiceEndpoint), GetRequestClientFormatter(OperationDescription, ServiceEndpoint), GetReplyDispatchFormatter(OperationDescription, ServiceEndpoint) und GetRequestDispatchFormatter(OperationDescription, ServiceEndpoint). 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 es Windows Communication Foundation (WCF)-Endpunkten, HTTP-Anforderungen von einem browserbasierten ASP.NET AJAX-Client zu empfangen. Der AJAX-Dienst mit HTTP POST ist ein Beispiel für die Verwendung dieses Erweiterungspunkts.
Warnung
Wenn das WebScriptEnablingBehavior verwendet wird, wird UriTemplate im WebGetAttribute-Attribut oder im WebInvokeAttribute-Attribut nicht unterstützt.
WebHttpDispatchOperationSelector
Die WebHttpDispatchOperationSelector-Klasse verwendet die UriTemplate-Klasse und die UriTemplateTable-Klasse, um Aufrufe an Dienstvorgänge zu senden.
Kompatibilität
Das WCF-WEB-HTTP-Programmiermodell 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 dazu finden Sie unter Vorgehensweise: Verfügbarmachen eines Vertrags für SOAP- und Webclients.
Sicherheit
Weil das WCF-WEB-HTTP-Programmiermodell die WS-*-Protokolle nicht unterstützt, ist die einzige Möglichkeit zur Absicherung eines auf dem WCF-WEB-HTTP-Programmiermodell basierenden Webdiensts das Verfügbarmachen Ihres Diensts mithilfe von SSL. Weitere Informationen zum Einrichten von SSL mit IIS 7.0 finden Sie unter Implementieren von SSL in IIS.