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

         

Описание веб службы


При использовании ASP.NET в директории IIS (по умолчанию это C:\Inetpub\wwwroot\) должен быть создан файл с расширением .asmx и строкой следующего вида.

<%@ WebService class="SampleService" language="C#" %>

Она означает, что при доступе к связанному с данным файлом URL по протоколам SOAP/HTTP будет активирована веб служба на основе класса SampleService. Класс веб службы может быть либо описан в этом же файле, либо помещен в сборке в подкаталоге bin. Класс веб службы не может быть классом общего вида. Класс веб службы обычно имеет необязательный атрибут System.Web.Services.WebServiceAttribute, имеющих два основных свойства – Description с текстовым описанием службы и Namespace с указанием уникального пространства имен, используемого при генерации описания интерфейса веб службы на языке WSDL. В его роли должен выступать уникальный URI, обычно связанный с адресом домена веб службы. Пространство имен не обязательно должно являться некоторым URL. Класс веб службы может быть унаследован от класса System.Web.Services.WebService. Необходимым на практике атрибутом класса веб службы при использовании WSE 3.0 является также атрибут Microsoft.Web.Services3.PolictyAttribute, который задает имя политики, в дальнейшем связываемое через файлы конфигурации с расширениями или списком допущенных пользователей.

Для того, чтобы включить метод класса веб службы в его общедоступный интерфейс, к методу применяется атрибут System.Web.Services.WebMethodAttribute. Он имеет два важных поля – Description и TransactionOption. Последний позволяет стать веб методу корневым объектом новой транзакции. Происходит это аналогично использованию сервисов без компонент COM+. Следует отметить, что веб метод может быть либо только корнем транзакции, либо не участвовать в ней. Поддержка распределенных между несколькими веб службами транзакций в .NET Framework 2.0 / WSE 3.0 отсутствует. Следующий веб метод является корнем новой транзакции.

<%@ WebService class="BankAccount" language="C#" %> using System; using System.Web.Services; using System.EnterpriseServices; using Microsoft.Web.Services3; [WebService(Namecpace="http://super.bank/webservices")] [Policy("BankAccountService")] public class BankAccount : WebService { [WebMethod(TransactionOption=TransactionOption.RequiresNew] public void Transfer(double Amount) { // ... // необязательное завершение транзакции в явном виде ContextUtil.SetComplete(); } }

Еще двумя важными атрибутами веб методов являются SoapRpcMethodAttribute и SoapDocumentMethodAttribute. Они определяют описание интерфейса метода на языке WSDL. В частности, при атрибуте SoapDocumentMethodAttribute будет использоваться кодирование параметров SOAP Document, что в настоящее время является стандартом, а при использовании SoapRpcMethodAttribute будет применяться кодирование SOAP RPC, в настоящее время признанное устаревшим. Следует отметить, что для преобразования содержимого тела пакета SOAP в параметры метода в обоих случаях используется класс XmlSerializer, поэтому на типы аргументов и результатов веб метода действуют все описанные в главе о сериализации ограничения, связанные с классом XmlSerializer. Атрибуты SoapDocumentMethod и SoapRpcMethod также содержат свойство OneWay, позволяющее клиенту производить односторонний вызов метода службы.



Содержание раздела