Freigeben über


Beispiel für ein einfaches Webprogrammiermodell

Dieses Beispiel veranschaulicht die grundlegenden Elemente der Erweiterungen des Windows Communication Foundation (WCF)-Webprogrammiermodells durch die Implementierung eines Diensts, der über HTTP GET und POST aufgerufen werden kann. Dieses Beispiel wird als einzelner Prozess implementiert, der den Dienst hostet und einen Client implementiert. Der Client ruft den Dienst mithilfe von HTTP auf.

Tipp

Zum Erstellen und Ausführen dieses Beispiels muss .NET Framework, Version 3.5 installiert sein. Zum Öffnen des Projekts und der Projektmappendateien ist Visual Studio 2008 erforderlich.

Assemblys und Namespaces

Das WCF-Webprogrammiermodell wird in der in diesem SDK enthaltenen System.ServiceModel.Web-Assembly implementiert. Diese Assembly wird von der System.ServiceModel-Klasse abgeleitet, die als Teil von .NET Framework 3.0 installiert wird.

Die Datei "Program.cs" (die sowohl den Dienst als auch den Client enthält) verweist auf die folgenden wichtigen Namespaces:

Dienst

Der Beispieldienst macht einen Vertrag mit zwei Vorgängen verfügbar: EchoWithGet und EchoWithPost (wie im folgenden Code gezeigt).

[ServiceContract]
public interface IService
{
   [OperationContract]
   [WebGet]
   string EchoWithGet(string s);

   [OperationContract]
   [WebInvoke]
   string EchoWithPost(string s);
}

Wie bei WCF-Diensten wird das ServiceContractAttribute-Attribut auf den IService-Vertrag angewandt und OperationContractAttribute auf dessen Methoden. Dieser Dienstvertrag nutzt zwei neue Attribute des Webprogrammiermodells: WebGetAttribute und WebInvokeAttribute. Diese Attribute geben an, wie die Vorgänge des Vertrags über HTTP verfügbar gemacht werden sollten.

Das WebGetAttribute-Attribut wird auf die EchoWithGet-Methode angewandt, wobei angezeigt wird, dass die Methode auf einem URI verfügbar gemacht werden sollte, der auf die HTTP GET-Methode (Beispiel: https://localhost:8000/EchoWithGet?s=Hello, world!) antwortet. Sowohl WCF-Clients als auch Webbrowser können diesen URI nutzen. WebInvokeAttribute wird auf die EchoWithPost-Methode angewandt, wobei angezeigt wird, dass der Vorgang auf einem URI verfügbar gemacht werden sollte, der auf die HTTP POST-Methode antwortet. Parameter der Methode werden als XML im Text der POST-Anforderung codiert. Dieser URI kann sowohl von WCF-Clients als auch von Webclients genutzt werden, die HTTP POST-Anforderungen mit XML-Text erstellen können (Beispiel: das Browser-XmlHttpRequest-Objekt). Weitere Informationen zum Webprogrammiermodell finden Sie im Beispiel Erweiterte Webprogrammierung in diesem SDK.

Der folgende Endpunkt für den Dienst wird explizit definiert.

using (WebServiceHost host = new WebServiceHost(typeof(Service), baseAddress))
{
    host.Open();

    ...
}

Der Dienst wird mithilfe des WebServiceHost-Typs gehostet. Dies ist eine neue Ableitung von ServiceHost, die das Hosting von Diensten erleichtert, die Erweiterungen des Webprogrammiermodells nutzen. WebServiceHost erstellt automatisch mithilfe von WebHttpBinding und WebHttpBehavior einen Standardendpunkt an der Basisadresse. Daher ist die explizite Definition des Endpunkts nicht notwendig. Dieser Typ stellt eine neue Standardbindung für die direkte Kommunikation über HTTP ohne SOAP dar. Diese Bindung unterstützt XML-Nachrichten und andere Typen von Nicht-XML-Inhalten (wie beispielsweise Klartext, Bilder oder andere Bytestreams).

Client

Dieses Beispiel veranschaulicht darüber hinaus, wie Sie das Webprogrammiermodell auf dem Client nutzen können, um HTTP-Anforderungen zu senden.

Der folgende Clientkanal wird mithilfe von WebChannelFactory erstellt.

using (WebChannelFactory<IService> cf = new WebChannelFactory<IService>(baseAddress))
{
    IService channel = cf.CreateChannel(); 
    ...
}

Ähnlich wie WebServiceHost erstellt WebChannelFactory mit WebHttpBinding und WebHttpBehavior einen Standardendpunkt an der Basisadresse.

Nachdem WebChannelFactory erstellt wurde, erstellt die Clientanwendung einen Kanal zum Dienst und ruft EchoWithGet gefolgt von EchoWithPost auf.

Nachdem die Interaktion abgeschlossen wurde, wartet das Programm auf einen Tastendruck. Während dieses Zeitraums überwacht der Dienst immer noch den Kanal. Wenn eine Taste gedrückt wird, fahren sowohl der Client als auch der Server herunter, und das Programm wird beendet.

Wenn Sie den Dienst ausführen, wird die folgende Ausgabe angezeigt.

Calling EchoWithGet via HTTP GET:

Output: You said Hello, world

Die gleiche Ausgabe kann generiert werden, indem man während der Ausführung dieses Beispiels in einem Webbrowser zu "https://localhost:8000/EchoWithGet?s=Hello, world!" navigiert.

Calling EchoWithPost via HTTP POST:

Output: You said Hello, world

Press any key to terminate

So richten Sie das Beispiel ein, erstellen es und führen es aus

  1. Vergewissern Sie sich, dass Sie die Beispiele zum einmaligen Setupverfahren für Windows Communication Foundation ausgeführt haben.

  2. Zum Erstellen der C#- oder Visual Basic .NET-Version der Projektmappe befolgen Sie die unter Erstellen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

  3. Wenn Sie das Beispiel in einer Konfiguration mit einem einzigen Computer oder computerübergreifend ausführen möchten, befolgen Sie die unter Durchführen der Windows Communication Foundation-Beispiele aufgeführten Anweisungen.

Siehe auch

Aufgaben

Erweiterte Webprogrammierung

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.