Разработка распределенных приложений в Microsoft.NET Framework



         

Создание посредника веб службы


При использовании WSE 3.0 для создания посредника следует использовать утилиту WseWsdl3.exe. Она запускается следующим образом.

WseWsdl3.exe http://localhost/service.asmx?wsdl /type:webClient /out:proxy.cs

Утилита использует указанный URL WSDL описания службы и создаст на его основе файл proxy.cs с исходным текстом класса посредника, наследованного от Microsoft.Web.Services3.WebServicesClientProtocol. Описание веб сервиса на языке WSDL создается автоматически службой ASP.NET или иной системой веб служб. Поскольку файл c кодом посредника может быть создан заново в дальнейшем, в него не рекомендуется вносить какие либо изменения. Например, для связывания посредника с политикой WSE следует воспользоваться частичным описанием класса следующим образом.

[Policy("BankClientPolicy")] public partial class BankService : Microsoft.Web.Services3.WebServicesClientProtocol { }

Следует отметить, что, как и при применении утилиты xsd.exe для генерации кода по XML схеме, созданный посредник реализует не совсем тот же интерфейс, что исходный класс. Связано это с преобразованием типов данных CLR к типам данным XSD схем при создании описания интерфейса, и обратным преобразованием при создании посредника (рис. 7.5). В частности, как типизированные, так и нетипизированные списки класса службы в ее посреднике превращаются в массивы.

Создание посредника веб службы

Рис. 7.5.  Создание посредника веб службы

Для каждого метода веб службы в посреднике создается пять публичных методов. Например, если служба имеет метод Transfer, то будут созданы следующие методы:

  • Transfer – для обычного вызова веб метода;
  • BeginTransfer и EndTransfer – для асинхронного вызова этого же метода через BeginInvoke/EndInvoke;
  • TransferAsync (два метода) – для асинхронного вызова метода через InvokeAsync.

Разработчик может и самостоятельно использовать BeginInvoke/EndInvoke/InvokeAsync с аналогичным результатом, речь идет просто об экономии времени разработчика. В посреднике так же создается метод CancelAsync (один на каждый веб класс) для отмены вызовов удаленных методов через InvokeAsync.

Утилита WseWsdl3.exe поддерживает только работу с методами, имеющими единственный параметр или же не имеющими ни одного. Аналогичная по назначению стандартная утилита wsdl.exe из .NET SDK, не использующая WSE, не имеет такого ограничения. Данное ограничение следует считать оправданным и даже желательным для вызываемых удаленно методов, как объяснялось во второй главе данного курса.




Содержание  Назад  Вперед