Share via


Gewusst wie: Erstellen eines Basiswebdiensts

Windows Communication Foundation (WCF) ermöglicht Ihnen die Erstellung eines Diensts, der einen Webendpunkt verfügbar macht. Webendpunkte senden Daten über reines XML; es gibt keinen SOAP-Umschlag. Dieses Thema veranschaulicht, wie ein solcher Endpunkt verfügbar gemacht wird.

Tipp

Ein Webendpunkt kann nur dadurch gesichert werden, dass er mithilfe der Transportsicherheit über HTTPS verfügbar gemacht wird. Bei Verwendung der nachrichtenbasierten Sicherheit werden die Sicherheitsinformationen in der Regel in SOAP-Header gestellt. Weil die an Nicht-SOAP-Endpunkte gesendeten Nachrichten keinen SOAP-Umschlag enthalten, gibt es keinen Ort, an den die Sicherheitsinformationen gestellt werden können, sodass Sie sich auf die Transportsicherheit verlassen müssen.

So erstellen Sie einen Webendpunkt

  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 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 WebServiceHost-Objekt.

  2. Fügen Sie ein ServiceEndpoint mit WebHttpBehavior hinzu.

    Tipp

    Wenn Sie keinen Endpunkt hinzufügen, erstellt WebServiceHost automatisch einen Standardendpunkt. WebServiceHost fügt außerdem WebHttpBehavior hinzu und deaktiviert die HTTP-Hilfeseite und die GET-Funktion der Web Services Description Language (WSDL), damit der Metadatenendpunkt nicht in Konflikt mit dem HTTP-Standardendpunkt gerät.

    Wenn Sie einen Nicht-SOAP-Endpunkt mit der URL "" hinzufügen, wird bei dem Versuch, einen Vorgang an dem Endpunkt aufzurufen, ein unerwartetes Verhalten ausgelöst. Dies liegt daran, dass der Abhör-URI des Endpunkts mit dem URI der Hilfeseite (die Seite, die angezeigt wird, wenn Sie zur Basisadresse eines WCF-Diensts wechseln) identisch ist.

    Sie können eine der folgenden Aktionen ausführen, um dies zu verhindern:

    • Geben Sie für einen Nicht-SOAP-Endpunkt immer einen nicht leeren URI an.
    • Deaktivieren Sie die Hilfeseite. Dies kann durch den folgenden Code erreicht werden:
  3. Öffnen Sie den Diensthost, und warten Sie, bis der Benutzer die EINGABETASTE drückt.

    In diesem Beispiel wird das Hosten eines Webdiensts mit einer Konsolenanwendung veranschaulicht. Sie können einen solchen Dienst auch innerhalb von IIS hosten. Geben Sie dazu, wie im folgenden Code veranschaulicht, die WebServiceHostFactory-Klasse in einer SVC-Datei an.

    <%ServiceHost 
        language=c#
        Debug="true"
        Service="Microsoft.Samples.Service"
        Factory=System.ServiceModel.Activation.WebServiceHostFactory%>
    

    Dieses Beispiel dient zum imperativen Konfigurieren des Webdiensthosts im Code. Der Webservicehost kann jedoch auch in einer Anwendungskonfigurationsdatei konfiguriert werden. Verwenden Sie zum Ausführen der Konfiguration, die im oben angegebenen Code enthalten ist, die folgende Anwendungskonfigurationsdatei:

    <configuration>
      <system.serviceModel>
        <services>
          <service
              name="Microsoft.ServiceModel.Samples.BasicWebProgramming.Service"
              behaviorConfiguration="MyServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="https://localhost:8000/"/>
              </baseAddresses>
            </host>
            <endpoint address="" 
                      binding="webHttpBinding"
                      contract="Microsoft.ServiceModel.Samples.BasicWebProgramming.IService" />
    
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServiceBehavior">
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

    Um die Anwendungskonfigurationsdatei verwenden zu können, müssen am vorherigen Code einige Änderungen vorgenommen werden. Basisadresse, Dienstverhalten oder Endpunkte müssen nicht mehr im Code angegeben werden. Im folgenden Beispiel sehen Sie den geänderten Code:

     using (WebServiceHost host = new WebServiceHost(typeof(Service)))
          {
              host.Open();
              Console.WriteLine("Service is running");
              Console.WriteLine("Press enter to quit...");
              Console.ReadLine();
              host.Close();
    }
    

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 in Code auf

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

  2. Fügen Sie WebHttpBehavior dem Endpunkt hinzu, den ChannelFactory aufruft.

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

  4. Schließen Sie WebServiceHost.

Beispiel

Unten ist die vollständige Codeauflistung für dieses Beispiel angegeben.

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