Routen nach Text

Das RouteByBody-Beispiel zeigt, wie Sie einen Dienst implementieren, der Nachrichtenobjekte mit einer beliebigen SOAP-Aktion annimmt. Dieses Beispiel basiert auf Erste Schritte, worin ein Dienst für einen Taschenrechner implementiert wird. Der Dienst implementiert einen einzelnen Calculate-Vorgang, der einen Message-Anforderungsparameter annimmt und eine Message-Antwort zurückgibt.

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird in IIS gehostet.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.

Im Beispiel wird das Senden von Nachrichten auf Grundlage des Textinhalts veranschaulicht. Der integrierte Nachrichtenversandmechanismus des Windows Communication Foundation (WCF)-Dienstmodells basiert auf Nachrichtenaktionen. Es gibt jedoch viele vorhandene Webdienste, die alle Vorgänge mit Action="" definieren. Es ist nicht möglich, einen Dienst auf Grundlage von WSDL zu erstellen, der weiter Anforderungsnachrichten auf Grundlage von Action-Informationen sendet. In diesem Beispiel wird ein Dienstvertrag veranschaulicht, der auf WSDL basiert (WSDL in der im Beispiel eingeschlossenen Datei Service.wsdl). Der Dienstvertrag ist Calculator, ähnlich wie der in Erste Schritte verwendete. [OperationContract] gibt jedoch Action="" für alle Vorgänge an.

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples"),
                 XmlSerializerFormat, DispatchByBodyBehavior]
    public interface ICalculator
    {
        [OperationContract(Action="")]
        double Add(double n1, double n2);
        [OperationContract(Action = "")]
        double Subtract(double n1, double n2);
        [OperationContract(Action = "")]
        double Multiply(double n1, double n2);
        [OperationContract(Action = "")]
        double Divide(double n1, double n2);
    }

Wenn ein Vertrag vorliegt, erfordert ein Dienst das benutzerdefinierte Sendeverhalten DispatchByBodyBehavior, damit die Nachrichten zwischen Vorgängen gesendet werden können. Dieses Versandverhalten initiiert den DispatchByBodyElementOperationSelector benutzerdefinierten Vorgangsselektor mit einer Tabelle der Vorgangsnamen, die durch QName der jeweiligen Wrapper-Elemente verschlüsselt sind. DispatchByBodyElementOperationSelector prüft das Starttag des ersten untergeordneten Elements von Body und wählt den Vorgang anhand der zuvor erwähnten Tabelle aus.

Der Client benutzt einen Proxy, der automatisch aus der vom Dienst exportierten WSDL mithilfe des ServiceModel Metadata Utility Tool (Svcutil.exe) generiert wird.

svcutil.exe  /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedProxy.cs

Dass die Aktionen aller Vorgänge leer sind, hat keine Auswirkungen auf den Clientcode, mit Ausnahme der Action-Parameter im automatisch generierten Proxy.

Der Clientcode führt mehrere Berechnungen aus. Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.

Add(100, 15.99) = 115.99
Subtract(145, 76.54) = 68.46
Multiply(9, 81.25) = 731.25
Divide(22, 7) = 3.14285714285714

Press <ENTER> to terminate client.

So können Sie das Beispiel einrichten, erstellen und ausführen

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

  2. Befolgen Sie zum Erstellen der Projektmappe die Anweisungen unter Erstellen der Windows Communication Foundation-Beispiele.

  3. Wenn Sie das Beispiel in einer Konfiguration mit einem Computer oder über Computer hinweg ausführen möchten, folgen Sie den Anweisungen unter Durchführen der Windows Communication Foundation-Beispiele.