Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В примере RouteByBody показано, как реализовать службу, которая принимает объекты сообщений с любым действием SOAP. Этот пример основан на руководстве «Начало работы», которое реализует сервис калькулятора. Служба реализует одну Calculate
операцию, которая принимает Message параметр запроса и возвращает Message ответ.
В этом примере клиент является консольным приложением (.exe) и служба размещается в службах IIS.
Замечание
Процедура установки и инструкции по сборке для этого примера находятся в конце этого раздела.
В примере демонстрируется отправка сообщений на основе содержимого текста. Встроенная в Windows Communication Foundation (WCF) модель службы использует механизм отправки сообщений, основанный на действиях сообщений. Однако существует множество существующих веб-служб, определяющих все их операции с помощью Action="". Невозможно создать службу на основе WSDL, которая непрерывно отправляет сообщения запроса на основе информации о действии. В этом примере показан контракт службы, основанный на WSDL (WSDL содержится в Service.wsdl, который входит в пример). Договор об оказании услуг — это калькулятор, аналогичный тому, который используется в разделе Начало работы. Однако [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 (Svcutil.exe).
svcutil.exe /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedProxy.cs
Тот факт, что действия всех операций пустые, не влияет на клиентский код, за исключением параметров 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.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.
Чтобы создать решение, следуйте инструкциям по созданию примеров Windows Communication Foundation.
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.