Übersicht über das WCF-Web-HTTP-Programmiermodell
Das WEB-HTTP-Programmiermodell von Windows Communication Foundation (WCF) stellt die grundlegenden Elemente bereit, die zum Erstellen von WEB-HTTP-Diensten mit WCF erforderlich sind. WCF WEB HTTP-Dienste sind für den Zugriff auf die breiteste Palette möglicher Clients konzipiert, einschließlich Webbrowsern und haben die folgenden eindeutigen Anforderungen:
URIs und URI-Verarbeitung URIs spielen eine zentrale Rolle beim Entwurf von WEB-HTTP-Diensten. Das WCF WEB HTTP-Programmiermodell verwendet die klassen UriTemplate und UriTemplateTable, um URI-Verarbeitungsfunktionen bereitzustellen.
Unterstützung für GET- und POST-Vorgänge WEB-HTTP-Dienste nutzen das GET-Verb für den Datenabruf, zusätzlich zu verschiedenen Aufrufverben für Datenänderung und Remoteaufruf. Das WCF WEB HTTP-Programmiermodell verwendet die WebGetAttribute und WebInvokeAttribute, um Dienstvorgänge mit sowohl GET als auch anderen HTTP-Verben wie PUT, POST und DELETE zu verknüpfen.
Mehrere Datenformate Webdienste verarbeiten viele Arten von Daten zusätzlich zu SOAP-Nachrichten. Das WCF WEB HTTP-Programmiermodell verwendet die WebHttpBinding und WebHttpBehavior, um viele verschiedene Datenformate wie XML-Dokumente, JSON-Datenobjekt und Datenströme von binären Inhalten wie Bilder, Videodateien oder Nur-Text zu unterstützen.
Das WCF WEB HTTP-Programmiermodell erweitert die Reichweite von WCF, um Webstilszenarien abzudecken, die WEB-HTTP-Dienste, AJAX- und JSON-Dienste sowie Atom/RSS-Feeds (Syndication) enthalten. Weitere Informationen zu AJAX- und JSON-Diensten finden Sie unter AJAX-Integration und JSON-Unterstützung. Weitere Informationen zur Syndication finden Sie unter WCF Syndication Overview.
Es gibt keine zusätzlichen Einschränkungen für die Datentypen, die von einem WEB-HTTP-Dienst zurückgegeben werden können. Jeder serialisierbare Typ kann von einem WEB-HTTP-Dienstvorgang zurückgegeben werden. Da WEB-HTTP-Dienstvorgänge von einem Webbrowser aufgerufen werden können, gibt es eine Einschränkung, welche Datentypen in einer URL angegeben werden können. Weitere Informationen dazu, welche Typen standardmäßig unterstützt werden, finden Sie unten im Abschnitt UriTemplate Query String Parameters and URLs. Das Standardverhalten kann geändert werden, indem Sie Ihre eigene T:System.ServiceModel.Dispatcher.QueryStringConverter-Implementierung bereitstellen, die angibt, wie die in einer URL angegebenen Parameter in den tatsächlichen Parametertyp konvertiert werden. Weitere Informationen finden Sie unter QueryStringConverter
Vorsicht
Dienste, die mit dem WCF WEB HTTP-Programmiermodell geschrieben wurden, verwenden keine SOAP-Nachrichten. Da SOAP nicht verwendet wird, können die von WCF bereitgestellten Sicherheitsfeatures nicht verwendet werden. Sie können jedoch transportbasierte Sicherheit verwenden, indem Sie Ihren Dienst mit HTTPS hosten. Weitere Informationen zur WCF-Sicherheit finden Sie unter Security Overview.
Warnung
Die Installation der WebDAV-Erweiterung für IIS kann dazu führen, dass Webdienste einen HTTP 405-Fehler zurückgeben, da die WebDAV-Erweiterung versucht, alle PUT-Anforderungen zu verarbeiten. Um dieses Problem zu umgehen, können Sie die WebDAV-Erweiterung deinstallieren oder die WebDAV-Erweiterung für Ihre Website deaktivieren. Für weitere Informationen siehe IIS und WebDav.
URI-Verarbeitung mit UriTemplate und UriTemplateTable
URI-Vorlagen bieten eine effiziente Syntax zum Ausdrücken großer Sätze struktureller ähnlicher URIs. Die folgende Vorlage gibt beispielsweise den Satz aller drei Segment-URIs an, die mit "a" beginnen und mit "c" enden, ohne den Wert des Zwischensegments zu berücksichtigen: a/{segment}/c
Diese Vorlage beschreibt URIs wie die folgenden:
a/x/c
a/y/c
a/z/c
Und so weiter.
In dieser Vorlage gibt die geschweifte Klammernnotation ("{segment}") anstelle eines Literalwerts ein variables Segment an.
.NET Framework stellt eine API zum Arbeiten mit URI-Vorlagen bereit, die als UriTemplatebezeichnet werden. UriTemplates
ermöglichen Ihnen das Folgende:
Sie können eine der
Bind
Methoden mit einer Reihe von Parametern aufrufen, um einen vollständig geschlossenen URI- zu erzeugen, der der Vorlage entspricht. Dies bedeutet, dass alle Variablen innerhalb der URI-Vorlage durch tatsächliche Werte ersetzt werden.Sie können
Match
() mit einem Kandidaten-URI aufrufen, der eine Vorlage verwendet, um einen Kandidaten-URI in seine Bestandteile aufzuteilen und ein Wörterbuch zurückzugeben, das die verschiedenen Teile des URI enthält, die gemäß den Variablen in der Vorlage bezeichnet werden.Bind
() undMatch
() sind Umgekehrte, sodass SieMatch
(Bind
( x ) aufrufen und mit derselben Umgebung zurückkehren können, mit der Sie begonnen haben.
Es gibt viele Situationen (insbesondere auf dem Server, bei denen das Verteilen einer Anforderung an einen Dienstvorgang basierend auf dem URI erforderlich ist), dass Sie einen Satz von UriTemplate Objekten in einer Datenstruktur nachverfolgen möchten, die unabhängig jede der enthaltenen Vorlagen adressieren kann. UriTemplateTable stellt eine Reihe von URI-Vorlagen dar und wählt die beste Übereinstimmung anhand einer Reihe von Vorlagen und einem Kandidaten-URI aus. Dies ist nicht mit einem bestimmten Netzwerkstapel (WCF enthalten) verbunden, sodass Sie ihn bei Bedarf verwenden können.
Das WCF-Dienstmodell verwendet UriTemplate und UriTemplateTable, um Dienstvorgänge mit einer Gruppe von URIs zu verknüpfen, die durch eine UriTemplatebeschrieben werden. Ein Dienstvorgang wird mithilfe von UriTemplate oder WebGetAttribute mit einer WebInvokeAttribute verknüpft. Weitere Informationen zu UriTemplate und UriTemplateTablefinden Sie in UriTemplate und in der UriTemplateTable.
WebGet- und WebInvoke-Attribute
WCF WEB HTTP-Dienste verwenden Abrufverben (z. B. HTTP GET) zusätzlich zu verschiedenen Aufrufverben (z. B. HTTP POST, PUT und DELETE). Mit dem WCF WEB HTTP-Programmiermodell können Dienstentwickler sowohl die URI-Vorlage als auch das Verb steuern, das ihren Dienstvorgängen mit dem WebGetAttribute und WebInvokeAttributezugeordnet ist. Mit dem WebGetAttribute und dem WebInvokeAttribute können Sie steuern, wie einzelne Vorgänge an URIs und die HTTP-Methoden gebunden werden, die diesen URIs zugeordnet sind. Fügen Sie z. B. WebGetAttribute und WebInvokeAttribute im folgenden Code hinzu.
[ServiceContract]
interface ICustomer
{
//"View It"
[WebGet]
Customer GetCustomer():
//"Do It"
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Mit dem vorherigen Code können Sie die folgenden HTTP-Anforderungen ausführen.
GET /GetCustomer
POST /UpdateCustomerName
Für WebInvokeAttribute wird standardmäßig POST eingesetzt, aber Sie können das Attribut auch für andere Verben verwenden.
[ServiceContract]
interface ICustomer
{
//"View It" -> HTTP GET
[WebGet( UriTemplate="customers/{id}" )]
Customer GetCustomer( string id ):
//"Do It" -> HTTP PUT
[WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
Customer UpdateCustomer( string id, Customer newCustomer );
}
Ein vollständiges Beispiel für einen WCF-Dienst, der das WCF WEB HTTP-Programmiermodell verwendet, finden Sie unter How to: Create a Basic WCF Web HTTP Service.
UriTemplate-Abfragezeichenfolgenparameter und URLs
Webdienste können über einen Webbrowser aufgerufen werden, indem sie eine URL eingeben, die einem Dienstvorgang zugeordnet ist. Bei diesen Dienstvorgängen können Abfragezeichenfolgenparameter verwendet werden, die in einem Zeichenfolgenformular innerhalb der URL angegeben werden müssen. In der folgenden Tabelle sind die Typen aufgeführt, die innerhalb einer URL und des verwendeten Formats übergeben werden können.
Typ | Format |
---|---|
Byte | 0 - 255 |
SByte | -128 - 127 |
Int16 | -32768 - 32767 |
Int32 | -2,147,483,648 - 2,147,483,647 |
Int64 | -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 |
UInt16 | 0 - 65535 |
UInt32 | 0 - 4,294,967,295 |
UInt64 | 0 - 18,446,744,073,709,551,615 |
Single | -3.402823e38 - 3.402823e38 (Exponentnotation ist nicht erforderlich) |
Double | -1.79769313486232e308 - 1.79769313486232e308 (Exponentnotation ist nicht erforderlich) |
Char | Ein beliebiges einzelnes Zeichen |
Decimal | Jede Dezimalzahl in Standarddarstellung (kein Exponent) |
Boolean | True oder False (Groß-/Kleinschreibung wird nicht berücksichtigt) |
String | Beliebige Zeichenfolge (leere Zeichenfolgen werden nicht unterstützt, und es werden keine Escapezeichen hinzugefügt) |
DateTime | MM/TT/JJJJ MM/TT/JJJJ HH:MM:SS [AM|PM] Monat Tag Jahr Monat Tag Jahr HH:MM:SS [AM|PM] |
TimeSpan | DD.HH:MM:SS Wobei DD = Tage, HH = Stunden, MM = Minuten, SS = Sekunden |
Guid | Ein GUID, beispielsweise: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
DateTimeOffset | MM/TT/JJJJ HH:MM:SS MM:SS Wobei DD = Tage, HH = Stunden, MM = Minuten, SS = Sekunden |
Enumerationen | Der Enumerationswert, der beispielsweise die Aufzählung definiert, wie im folgenden Code dargestellt.public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; Alle einzelnen Enumerationswerte (oder ihre entsprechenden ganzzahligen Werte) können in der Abfragezeichenfolge angegeben werden. |
Typen, die über ein TypeConverterAttribute verfügen, mit dem der Typ in eine Zeichenfolgendarstellung bzw. aus einer Zeichenfolgendarstellung konvertiert werden kann. |
Hängt vom Typkonverter ab. |
Formate und das WCF WEB HTTP-Programmiermodell
Das WCF WEB HTTP-Programmiermodell verfügt über neue Features für die Arbeit mit vielen verschiedenen Datenformaten. Auf der Bindungsebene kann der WebHttpBinding die folgenden verschiedenen Arten von Daten lesen und schreiben:
- XML
- JSON
- Undurchsichtige binäre Datenströme
Dies bedeutet, dass das WCF WEB HTTP-Programmiermodell jede Art von Daten verarbeiten kann, Sie jedoch möglicherweise gegen Streamprogrammieren.
.NET Framework 3.5 bietet Unterstützung für JSON-Daten (AJAX) sowie Syndication-Feeds (einschließlich ATOM und RSS). Weitere Informationen zu diesen Features finden Sie unter WCF Web HTTP Formatting, WCF Syndication Overview, und AJAX Integration and JSON Support.
WCF WEB HTTP-Programmiermodell und Sicherheit
Da das WCF WEB HTTP-Programmiermodell die WS-*-Protokolle nicht unterstützt, besteht die einzige Möglichkeit zum Sichern eines WCF WEB HTTP-Diensts darin, den Dienst über HTTPS mithilfe von SSL verfügbar zu machen. Weitere Informationen zum Einrichten von SSL mit IIS 7.0 finden Sie unter Implementieren von SSL in IIS-.
Problembehandlung beim WCF WEB HTTP-Programmiermodell
Beim Aufrufen von WCF-WEB-HTTP-Diensten mit einem ChannelFactoryBase<TChannel> zum Erstellen eines Kanals verwendet die WebHttpBehavior den in der Konfigurationsdatei festgelegten EndpointAddress, auch wenn ein anderer EndpointAddress an die ChannelFactoryBase<TChannel>übergeben wird.