Udostępnij przez


Trasa według ciała

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 Rozpoczęcie, które implementuje usługę kalkulatora. Usługa implementuje pojedynczą operację Calculate, która akceptuje parametr zapytania Message i zwraca odpowiedź Message.

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

Uwaga / Notatka

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="". Niemożliwe jest zbudowanie usługi opartej na standardzie WSDL, która stale wysyła komunikaty żą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 na usługę to 'Kalkulator', podobny do tego używanego w Wprowadzenie. Jednak [OperationContract] określa 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, w której kluczami są QName odpowiednich elementów opakowujących. DispatchByBodyElementOperationSelector Sprawdza znacznik początkowy pierwszego elementu podrzędnego Body i wybiera operację przy użyciu wymienionej wcześniej tabeli.

Klient używa serwera proxy automatycznie wygenerowanego z WSDL wyeksportowanego przez usługę przy użyciu narzędzia 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

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

Kod klienta wykonuje kilka obliczeń. Po uruchomieniu przykładu żądania operacji i odpowiedzi są wyświetlane w oknie konsoli klienta. Naciśnij 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ładowy program

  1. Upewnij się, że wykonano procedurę instalacji One-Time 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 Uruchamianie przykładów programu Windows Communication Foundation.