Überblick über WCF-Webprogrammiermodelle
Das Webprogrammiermodell stellt die grundlegenden Frameworkelemente bereit, die zur Erstellung von Webdiensten mit Windows Communication Foundation (WCF) erforderlich sind. Webdienste sind darauf ausgelegt, für die größtmögliche Palette an möglichen Clients zugänglich zu sein (einschließlich Webbrowser ohne zusätzliches Clientframework). Für Webdienste gelten die folgenden besonderen Anforderungen:
- URIs und URI-Verarbeitung URIs spielen eine zentrale Rolle im Entwurf von Webdiensten. Das WCF-Webprogrammiermodell verwendet die UriTemplate-Klasse und UriTemplateTable-Klasse, um URI-Verarbeitungsfunktionen bereitzustellen.
- Unterstützung für GET- und POST-Vorgänge. Webdienste nutzen neben den verschiedenen Aufrufverben für Datenbearbeitung und Remoteaufrufe das GET-Verb für den Datenabruf. Im Webprogrammiermodell werden Dienstvorgänge mithilfe von WebGetAttribute und WebInvokeAttribute sowohl GET-Verben als auch POST-Verben zugeordnet.
- Mehrere Datenformate. Webdienste verarbeiten neben SOAP-Nachrichten viele verschiedene Arten von Daten. Im Webprogrammiermodell werden durch den Einsatz von WebHttpBinding und WebHttpBehavior viele verschiedene Datenformate unterstützt. Hierzu gehören XML-Dokumente, JSON-Datenobjekte und Streams mit Binärdaten, wie z. B. Bilder, Videodateien oder Klartext.
Das Webprogrammiermodell erweitert den Einsatzbereich von WCF um Webszenarien, wie beispielsweise REST-Dienste, AJAX- und JSON-Dienste sowie Syndication-Feeds (ATOM/RSS). Weitere Informationen zu AJAX- und JSON-Diensten finden Sie unter AJAX-Integration und JSON-Unterstützung. Weitere Informationen zur Syndication finden Sie unter Übersicht über WCF Syndication.
URI-Verarbeitung mit UriTemplate und UriTemplateTable
URI-Vorlagen stellen eine rationelle Syntax zur Angabe großer Sätze strukturell ähnlicher URIs bereit. Beispielsweise wird mit der folgenden Vorlage der Satz aller aus drei Segmenten bestehenden URIs angegeben, die mit "a" beginnen, mit "c" enden und im mittleren Segment einen beliebigen Wert enthalten können: 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 Notation mit geschweiften Klammern ("{segment}") ein variables Segment statt eines Literalwerts an.
.NET Framework 3.5 stellt eine neue API mit dem Namen UriTemplate zum Arbeiten mit URI-Vorlagen bereit. Mit UriTemplates können Sie die folgenden Aktionen ausführen:
- Sie können eine der Bind-Methoden mit einem Satz von Parametern aufrufen, um einen der Vorlage entsprechenden vollständig geschlossenen URI zu erzeugen. Dies bedeutet, dass alle Variablen innerhalb der URI-Vorlage durch Istwerte ersetzt werden.
- Sie können Match() mit einem potenziellen URI aufrufen. Diese Methode schlüsselt den potenziellen URI mithilfe einer Vorlage in seine Bestandteile auf und gibt ein Wörterbuch zurück, in dem die verschiedenen URI-Teile mit den zugehörigen Variablen aus der Vorlage verzeichnet sind.
- Bind() und Match() sind Gegenstücke, sodass Sie Match( Bind( x ) ) aufrufen können und wieder zur Ausgangsumgebung zurückkehren.
Es ist häufig wünschenswert (insbesondere auf dem Server, wo es erforderlich ist, eine Anforderung basierend auf dem URI an einen Dienstvorgang weiterzuleiten), einen Satz von UriTemplate-Objekten in einer Datenstruktur zu verfolgen, die unabhängig voneinander die einzelnen darin enthaltenen Vorlagen darstellen können. UriTemplateTable stellt einen Satz von URI-Vorlagen dar und wählt aus einem gegebenen Vorlagensatz die beste Übereinstimmung für den zu prüfenden URI aus. Da diese Methode an keinen bestimmten Netzwerkstapel (einschließlich WCF) gebunden ist, können Sie sie überall wo notwendig einsetzen.
Das WCF-Dienstmodell verwendet UriTemplate und UriTemplateTable, um Dienstvorgänge mit einem Satz URIs zu verknüpfen, die durch eine UriTemplate beschrieben werden. Ein Dienstvorgang wird mithilfe von WebGetAttribute oder WebInvokeAttribute mit einer UriTemplate verknüpft.
Dienstvorgangsparameter und URLs
Webdienste können aus einem Webbrowser heraus aufgerufen werden, indem eine URL eingegeben wird, die mit einem Dienstvorgang verknüpft ist. Diese Dienstvorgänge verarbeiten möglicherweise Parameter, die in Form einer Zeichenfolge innerhalb der URL angegeben werden müssen. In der folgenden Tabelle sind die Typen, die innerhalb einer URL übergeben werden können, und das hierfür verwendete Format aufgeführt.
Typ | Format |
---|---|
0 - 255 |
|
-128 - 127 |
|
-32768 - 32767 |
|
-2.147.483.648 - 2.147.483.647 |
|
-9.223.372.036.854.775.808 - 9.223.372.036.854.775.807 |
|
0 - 65535 |
|
0 - 4.294.967.295 |
|
0 - 18.446.744.073.709.551.615 |
|
-3.402823e38 - 3.402823e38 (Exponentennotation nicht erforderlich) |
|
-1.79769313486232e308 - 1.79769313486232e308 (Exponentennotation nicht erforderlich) |
|
Ein beliebiges einzelnes Zeichen |
|
Eine beliebige Dezimalzahl in Standardnotation (kein Exponent) |
|
True oder False (Groß-/Kleinschreibung wird nicht berücksichtigt) |
|
Beliebige Zeichenfolge (leere Zeichenfolgen werden nicht unterstützt, und es werden keine Escapezeichen hinzugefügt) |
|
MM/TT/JJJJ MM/TT/JJJJ HH:MM:SS [AM|PM] Monat Tag Jahr Monat Tag Jahr HH:MM:SS [AM|PM] |
|
TT.HH:MM:SS Wobei TT = Tage, HH = Stunden, MM = Minuten, SS = Sekunden |
|
Ein GUID, beispielsweise: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8 |
|
MM/TT/JJJJ HH:MM:SS MM:SS Wobei TT = Tage, HH = Stunden, MM = Minuten, SS = Sekunden |
|
Enumerationen |
Z. B der Enumerationswert, der die Enumeration definiert, wie im folgenden Code gezeigt.
Jeder der einzelnen Enumerationswerte (bzw. der entsprechenden ganzzahligen Werte) kann 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. |
WebGet und WebInvoke
Webdienste nutzen neben den verschiedenen Aufrufverben (beispielsweise das Verb HTTP POST, das von SOAP-Diensten verwendet wird) Verben zum Abruf von Daten (z. B. HTTP GET). Das Webprogrammiermodell ermöglicht es den Entwicklern von Diensten, sowohl die URI-Vorlage als auch das mit den Dienstvorgängen verknüpfte Verb mithilfe von WebGetAttribute und WebInvokeAttribute festzulegen Mit WebGetAttribute und WebInvokeAttribute können Sie steuern, wie einzelne Vorgänge an die URIs und die mit diesen URIs verknüpften HTTP–Methoden gebunden werden. Beispielsweise durch Hinzufügen von WebGetAttribute und WebInvokeAttribute im folgenden Code.
[ServiceContract]
interface ICustomer
{
//"View It"
[OperationContract]
[WebGet]
Customer GetCustomer():
//"Do It"
[OperationContract]
[WebInvoke]
Customer UpdateCustomerName( string id,
string newName );
}
Der vorangehende Code ermöglicht es Ihnen, die folgenden HTTP-Anforderungen zu formulieren.
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
[OperationContract]
[WebGet( UriTemplate=“customers/{id}” )]
Customer GetCustomer( string id ):
//"Do It“ -> HTTP PUT
[OperationContract]
[WebInvoke( UriTemplate=“customers/{id}”, Method=“PUT” )]
Customer UpdateCustomer( string id, Customer newCustomer );
}
Formate und das Webprogrammiermodell
Das Webprogrammiermodell umfasst neue Features, die die Verwendung von vielen verschiedenen Datenformaten ermöglichen. Auf der Bindungsebene kann WebHttpBinding die folgenden anderen Arten von Daten lesen und schreiben:
- XML
- JSON
- Nicht transparente binäre Streams
Das heißt, dass das Webprogrammiermodell jeden Datentyp handhaben kann, aber unter Umständen die Programmierung mit Stream erfordert.
.NET Framework 3.5 stellt Unterstützung für JSON-Daten (AJAX) sowie Syndication-Feeds (einschließlich ATOM und RSS) bereit. Weitere Informationen zu diesen Features finden Sie unter Übersicht über WCF Syndication und unter AJAX-Integration und JSON-Unterstützung.
Siehe auch
Konzepte
Objektmodell für WCF-Webprogrammierung