Поделиться через


Маршрутизация по тексту сообщения

В этом образце показано, как реализовать службу, которая принимает объекты сообщений с действием SOAP. Данный образец основан на образце Образец для начала работы, реализующем службу калькулятора. Служба реализует одну операцию Calculate, которая принимает параметр запроса Message и возвращает ответ Message.

В этом образце клиентом является консольное приложение (EXE), а служба размещается в службах IIS.

ms750531.note(ru-ru,VS.100).gifПримечание
Процедура установки и инструкции по построению для данного образца расположены в конце этого раздела.

Этот образец демонстрирует диспетчеризацию сообщений на основе содержимого тела сообщения. Встроенный механизм диспетчеризации сообщений модели службы Windows Communication Foundation (WCF) основан на параметрах Action сообщений. Однако есть много существующих веб-служб, которые для всех своих операций определяют параметр Action="". Невозможно построить службу на основе кода WSDL, когда диспетчеризация сообщений запросов осуществляется на основе параметра Action. В этом образце показан контракт службы, основанный на коде WSDL (код WSDL содержится в файле Service.wsdl, который входит в этот образец). Контракт службы — Calculator, он аналогичен контракту, используемому в образце Образец для начала работы. Однако контракт [OperationContract] задает для всех операций Action="".

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

Чтобы при таком контракте можно было распределять сообщения между операциями, службе требуется пользовательское поведение диспетчеризации DispatchByBodyBehavior. Поведение диспетчеризации инициализирует пользовательский селектор операций DispatchByBodyElementOperationSelector с таблицей имен операций, обозначенных с помощью значений QName или соответствующих элементов-оболочек. Селектор DispatchByBodyElementOperationSelector проверяет начальный тег первого дочернего элемента внутри элемента Body и выбирает операцию с помощью указанной таблицы.

Клиент использует прокси, автоматически созданный на базе кода WSDL, экспортированного службой с помощью средства Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe).

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

Тот факт, что параметры Action всех операций пусты, не влияет на клиентский код, не считая параметров Action автоматически созданного прокси.

Клиентский код выполняет несколько вычислений. При выполнении образца запросы и отклики операций отображаются в окне консоли клиента. Чтобы закрыть клиент, нажмите клавишу ВВОД в окне клиента.

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.

Настройка, построение и выполнение образца

  1. Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.

  2. Чтобы выполнить построение решения, следуйте инструкциям раздела Построение образцов Windows Communication Foundation.

  3. Чтобы выполнить образец на одном или нескольких компьютерах, следуйте инструкциям в разделе Running the Windows Communication Foundation Samples.

ms750531.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Extensibility\Interop\RouteByBody