Ü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

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 (Exponentennotation nicht erforderlich)

Double

-1.79769313486232e308 - 1.79769313486232e308 (Exponentennotation nicht erforderlich)

Char

Ein beliebiges einzelnes Zeichen

Decimal

Eine beliebige Dezimalzahl in Standardnotation (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

TT.HH:MM:SS

Wobei TT = 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 TT = Tage, HH = Stunden, MM = Minuten, SS = Sekunden

Enumerationen

Z. B der Enumerationswert, der die Enumeration definiert, wie im folgenden Code gezeigt.

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

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

Weitere Ressourcen

WCF Syndication
Webprogrammiermodell