Routen nach TextRoute by Body

In diesem Beispiel wird das Implementieren eines Diensts veranschaulicht, der Nachrichtenobjekte mit einer beliebigen SOAP-Aktion annimmt.This sample demonstrates how to implement a service that accepts message objects with any SOAP action. Dieses Beispiel basiert auf der Einstieg , implementiert einen rechnerdienst.This sample is based on the Getting Started that implements a calculator service. Der Dienst implementiert einen einzelnen Calculate-Vorgang, der einen Message-Anforderungsparameter annimmt und eine Message-Antwort zurückgibt.The service implements a single Calculate operation that accepts a Message request parameter and returns a Message response.

In diesem Beispiel ist der Client eine Konsolenanwendung (.exe), und der Dienst wird in IIS gehostet.In this sample, the client is a console application (.exe) and the service is hosted in IIS.

Hinweis

Die Setupprozedur und die Buildanweisungen für dieses Beispiel befinden sich am Ende dieses Themas.The setup procedure and build instructions for this sample are located at the end of this topic.

Im Beispiel wird das Senden von Nachrichten auf Grundlage des Textinhalts veranschaulicht.The sample demonstrates message dispatch based on the body content. Die integrierte Windows Communication Foundation (WCF)-Dienst Modell nachrichtensendemechanismus basiert auf Nachrichtenaktionen.The built-in Windows Communication Foundation (WCF) service model message dispatch mechanism is based on message Actions. Es gibt jedoch viele vorhandene Webdienste, die alle Vorgänge mit Action="" definieren.However, there are many existing Web services that define all of their operations with Action="". Es ist nicht möglich, einen Dienst auf Grundlage von WSDL zu erstellen, der weiter Anforderungsnachrichten auf Grundlage von Action-Informationen sendet.It is impossible to build a service based on WSDL that keeps dispatching request messages based on Action information. In diesem Beispiel wird ein Dienstvertrag veranschaulicht, der auf WSDL basiert (WSDL in der im Beispiel eingeschlossenen Datei Service.wsdl).This sample demonstrates a service contract that is based on WSDL (the WSDL is contained in Service.wsdl that is included with the sample). Der Dienstvertrag ist Rechner, mit dem Umwandlungsoperator in verwendet Einstieg.The service contract is Calculator, similar to the one used in Getting Started. [OperationContract] gibt jedoch Action="" für alle Vorgänge an.However the [OperationContract] specifies Action="" for all operations.

[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.Given a contract, a service requires custom dispatch behavior DispatchByBodyBehavior to allow messages to be dispatched between operations. Dieses Sendeverhalten initialisiert die DispatchByBodyElementOperationSelector benutzerdefinierte Vorgangsauswahl mit einer Tabelle der Vorgangsnamen, sortiert nach der entsprechenden Wrapperelemente QName.This dispatch behavior initializes the DispatchByBodyElementOperationSelector custom operation selector with a table of the operation names keyed by QName of respective wrapper elements. DispatchByBodyElementOperationSelector prüft das Starttag des ersten untergeordneten Elements von Body und wählt den Vorgang anhand der zuvor erwähnten Tabelle aus.DispatchByBodyElementOperationSelector looks at the start tag of the first child of the Body and selects the operation using the table previously mentioned.

Der Client verwendet einen Proxy aus der WSDL exportiert, die vom Dienst mit automatisch generierten ServiceModel Metadata Utility Tool (Svcutil.exe).The client uses a proxy auto-generated from the WSDL exported by the service using ServiceModel Metadata Utility Tool (Svcutil.exe).

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.The fact that actions of all operations are empty has no impact on the client code, except for the Action parameters in the auto-generated proxy.

Der Clientcode führt mehrere Berechnungen aus.The client code performs several calculations. Wenn Sie das Beispiel ausführen, werden die Anforderungen und Antworten für den Vorgang im Clientkonsolenfenster angezeigt.When you run the sample, the operation requests and responses are displayed in the client console window. Drücken Sie im Clientfenster die EINGABETASTE, um den Client zu schließen.Press ENTER in the client window to shut down the client.

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ührenTo set up, build, and run the sample

  1. Stellen Sie sicher, dass Sie ausgeführt haben die Setupprozedur für die Windows Communication Foundation-Beispiele zum einmaligen.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Führen Sie zum Erstellen der Projektmappe die Anweisungen im Erstellen der Windows Communication Foundation-Beispiele.To build the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Um das Beispiel in einer einzelnen oder computerübergreifenden Konfiguration ausführen möchten, folgen Sie den Anweisungen Ausführen der Windows Communication Foundation-Beispiele.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, fahren Sie mit Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4 aller Windows Communication Foundation (WCF) herunterladen und WFWF Beispiele.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Extensibility\Interop\RouteByBody

Siehe auchSee Also