Freigeben über


Gewusst wie: Verfügbarmachen eines Vertrags für SOAP- und Webclients

Standardmäßig macht Windows Communication Foundation (WCF) Endpunkte nur für SOAP-Clients verfügbar. In Gewusst wie: Erstellen eines Basiswebdiensts wird ein Endpunkt für Nicht-SOAP-Clients verfügbar gemacht. Manchmal möchten Sie jedoch einen Vertrag für beide Wege verfügbar machen, als Webendpunkt und als SOAP-Endpunkt. In diesem Thema wird ein Beispiel für diesen Vorgang gezeigt.

So definieren Sie den Dienstvertrag

  1. Definieren Sie einen Dienstvertrag mit einer Schnittstelle, die mit den Attributen WebInvokeAttribute, WebGetAttribute und ServiceContractAttribute gekennzeichnet ist.

    Tipp

    Standardmäßig ordnet WebInvokeAttribute dem Vorgang POST-Aufrufe zu. Sie können jedoch die Methode, die dem Vorgang zugeordnet werden soll, mit dem "method="-Parameter angeben. WebGetAttribute besitzt keinen "method="-Parameter und ordnet dem Dienstvorgang nur GET-Aufrufe zu.

  2. Implementieren Sie den Dienstvertrag.

So hosten Sie den Dienst

  1. Erstellen Sie ein ServiceHost-Objekt.

  2. Fügen Sie einen ServiceEndpoint mit BasicHttpBinding für den SOAP-Endpunkt hinzu.

  3. Fügen Sie einen ServiceEndpoint mit WebHttpBinding für den Nicht-SOAP-Endpunkt hinzu, und fügen Sie das WebHttpBehavior dem Endpunkt hinzu.

  4. Rufen Sie Open() für eine ServiceHost-Instanz auf, um den Diensthost zu öffnen.

So rufen Sie Dienstvorgänge auf, die GET in Internet Explorer zugeordnet werden

  1. Öffnen Sie Internet Explorer, geben Sie "https://localhost:8000/EchoWithGet?s=Hello, world!" ein, und drücken Sie die EINGABETASTE. Die URL enthält die Basisadresse des Diensts ("https://localhost:8000/"), die relative Adresse des Endpunkts (""), den aufzurufenden Dienstvorgang ("EchoWithGet") und ein Fragezeichen, gefolgt von einer Liste der benannten Parameter, die durch ein kaufmännisches Und (&) getrennt sind.

So rufen Sie Dienstvorgänge auf dem Webendpunkt im Code auf

  1. Erstellen Sie eine Instanz von WebChannelFactory innerhalb eines using-Blocks.

Tipp

Die Close()-Methode wird am Ende des using-Blocks automatisch für den Kanal aufgerufen.

  1. Erstellen Sie den Kanal, und rufen Sie den Dienst auf.

So rufen Sie Dienstvorgänge an dem SOAP-Endpunkt auf

  1. Erstellen Sie eine Instanz von ChannelFactory innerhalb eines using-Blocks.

  2. Erstellen Sie den Kanal, und rufen Sie den Dienst auf.

So schließen Sie den Diensthost

  1. Schließen Sie den Diensthost.

Beispiel

Unten folgt die vollständige Codeauflistung für dieses Thema.

Kompilieren des Codes

Verweisen Sie beim Kompilieren der Datei Service.cs auf System.ServiceModel.dll und System.ServiceModel.Web.dll.

Siehe auch

Referenz

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior