Udostępnij za pośrednictwem


Trasa według treści

W przykładzie RouteByBody pokazano, jak zaimplementować usługę, która akceptuje obiekty komunikatów z dowolną akcją protokołu SOAP. Ten przykład jest oparty na wprowadzenie , który implementuje usługę kalkulatora. Usługa implementuje Message pojedynczą Calculate operację, która akceptuje parametr żądania i zwraca Message odpowiedź.

W tym przykładzie klient jest aplikacją konsolową (.exe), a usługa jest hostowana w usługach IIS.

Uwaga

Procedura instalacji i instrukcje kompilacji dla tego przykładu znajdują się na końcu tego tematu.

W przykładzie pokazano wysyłanie komunikatów na podstawie zawartości treści. Wbudowany mechanizm wysyłania komunikatów modelu usługi Windows Communication Foundation (WCF) jest oparty na akcjach komunikatów. Istnieje jednak wiele istniejących usług sieci Web, które definiują wszystkie operacje za pomocą elementu Action="". Nie można utworzyć usługi opartej na języku WSDL, która utrzymuje wysyłanie komunikatów żądań na podstawie informacji o akcji. W tym przykładzie pokazano kontrakt usługi oparty na języku WSDL (plik WSDL znajduje się w pliku Service.wsdl dołączonym do przykładu). Kontrakt usługi to Kalkulator, podobny do tego, który był używany w temacie Wprowadzenie. Jednak określa [OperationContract]Action="" dla wszystkich operacji.

[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);
    }

Biorąc pod uwagę kontrakt, usługa wymaga niestandardowego zachowania DispatchByBodyBehavior wysyłania, aby umożliwić wysyłanie komunikatów między operacjami. To zachowanie wysyłania inicjuje DispatchByBodyElementOperationSelector selektor operacji niestandardowych z tabelą nazw operacji kluczem QName odpowiednich elementów otoki. DispatchByBodyElementOperationSelector Sprawdza tag początkowy pierwszego elementu podrzędnego treści i wybiera operację przy użyciu wymienionej wcześniej tabeli.

Klient korzysta z serwera proxy wygenerowanego automatycznie na podstawie języka WSDL wyeksportowanego przez usługę przy użyciu narzędzia ServiceModel Metadata Tool (Svcutil.exe).

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

Fakt, że akcje wszystkich operacji są puste, nie ma wpływu na kod klienta, z wyjątkiem parametrów akcji w automatycznie generowanym serwerze proxy.

Kod klienta wykonuje kilka obliczeń. Po uruchomieniu przykładu żądania operacji i odpowiedzi są wyświetlane w oknie konsoli klienta. Naciśnij klawisz ENTER w oknie klienta, aby zamknąć klienta.

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.

Aby skonfigurować, skompilować i uruchomić przykład

  1. Upewnij się, że wykonano procedurę instalacji jednorazowej dla przykładów programu Windows Communication Foundation.

  2. Aby skompilować rozwiązanie, postępuj zgodnie z instrukcjami w temacie Building the Windows Communication Foundation Samples (Tworzenie przykładów programu Windows Communication Foundation).

  3. Aby uruchomić przykład w konfiguracji pojedynczej lub między maszynami, postępuj zgodnie z instrukcjami w temacie Uruchamianie przykładów programu Windows Communication Foundation.