Класс WebService

Класс System.Web.Services.WebService является необязательным базовым классом для Web-служб и обеспечивает доступ к таким общим объектам ASP.NET, как Session, Server, Application, Context и User. Вы можете произвести Web-службу непосредственно из класса System.Object, однако по умолчанию, Web-службы, созданные при помощи Visual Studio .NET, автоматически производятся из базового класса WebService. Если вы создаете Web-службу, не производя ее класс из класса WebService, то вы не сможете получить доступ к объектам ASP.NET. Если Web-служба не наследует от базового класса WebService, она может получить доступ к внутренним объектам ASP.NET через System.Web.Http Context.Current. Давайте рассмотрим повнимательней свойства класса WebService. Эти свойства описаны в таблице Е.З.

Таблица Е.З. Свойства класса WebService

Свойства

Описание

Application

Возвращает объект Application для текущего HTTP-запроса

Context

Возвращает ASP.NET HttpContext для текущего запроса, который инкапсулирует все специфичные для HTTP контексты, используемые сервером для обработки Web-запросов

Server

Возвращает HttpServerUtility для текущего запроса

Session

Возвращает экземпляр HttpSessionState для текущего запроса

User

Возвращает объект сервера ASP.NET User, который можно использовать для аутентификации текущего пользователя

Атрибут WebMethod

Если вы хотите сделать свой публичный метод доступным извне, как часть Web-службы, задайте этому методу атрибут WebMethod. Атрибут WebMethod предусматривает следующие свойства:

  • ? BufferResponse;
  • ? Description;
  • ? MessageName;
  • ? CacheDuration;
  • ? EnableSession;
  • ? TransactionOption.

АТРИБУТ WEBMETHOD: BUFFERRESPONSE

Свойство BufferResponse атрибута WebMethod отвечает за буферизацию ответов, которые должны отсылаться клиентам Web-службы. Если это свойство имеет значение true, то ответ на запрос накапливается в буфере в памяти, пока не иссякнет место в буфере или не будет накоплен весь ответ. После буферизации, ответ отправляется клиенту по сети. Значение по умолчанию - true. Техника буферизации улучшает производительность, сокращая обмен между рабочим процессом и процессом IIS. Вы можете установить это свойство в false, при этом ASP.NET будет буферизовать ответы порциями по 16 К. Если вам не нужно иметь размещенным в памяти весь ответ на запрос, или если метод службы возвращает клиенту огромный объем данных, то это свойство можно установить в false. Если это свойство имеет значение false, то расширения SOAP для соответствующего метода Web-службы отключаются.

[WebMethod (BufferResponse=false)] public string GetData()

{

// реализация 1

АТРИБУТ WEBMETHOD: DESCRIPTION

Свойство Description атрибута WebMethod вы можете использовать для задания имени, под которым метод будет публиковаться. Это необязательное свойство. Оно используется в описании службы и в ее страницах Справки.

По умолчанию оно имеет значение String.Empty. В следующем примере для описания метода Web-службы используется строка "Web Service which provides Concatenation functionality" (Web-служба Concatenate предназначена для сцепления строк), и то же самое значение можно использовать в WSDL-файле, как показано на рисунке Е.10.

[WebMethod (Description="Web Service which provides Concatenation functionality")]

public string Concatenate(string si, string s2)

{

string s3="Concatenated string ="; return s3+sl+s2;

}

АТРИБУТ Л/ЕВМЕТНСЮ: МЕББАСЕМАМЕ

Свойство MessageName атрибута WebMethod позволяет задать уникальное имя для перегруженного или полиморфного метода. Свойство MessageNa- те можно использовать для создания псевдонимов для имен методов или свойств. Чтобы нагляднее увидеть роль этого свойства, давайте рассмотрим небольшой пример УеЬ-службы, которая выполняет суммирование чисел и состоит из трех методов.

[WebMethod (Description="Add two floats.")] public float Add(float si, float s2)

{

return si + s2;

}

[WebMethod (Description="Add two integers.")] public int Add(int si, int s2)

{

return si + s2;

}

[WebMethod (Description="Add two three integers.")] public int Add(int si, int s2, int s3)

{

return si + s2 + s3;

}

Эта программа откомпилируется без ошибок. Но если вы пошлете запрос к этой Web-службе, то столкнетесь со следующими ошибками перегруженных и полиморфных методов, соответственно.

  • ? System.Exception: Both Int32 Add(Int32, Int32) and Single Add(Single, Single) use the message name Add'. Use the MessageName property of the WebMethod custom attribute to specify unique message names for the methods.
  • ? System.Exception: Both Int32 Add(Int32, Int32, Int32) and Int32 Add(Int32, Int32) use the message name Add'. Use the MessageName property of the WebMethod custom attribute to specify unique message names for the methods.
  • (Обе функции Add используют одно имя сообщения. Используйте свойство MessageName атрибута WebMethod, для того чтобы задать уникальные имена этим методам.)

Если вы измените программу так, как показано ниже, при помощи свойства MessageName, то программа будет работать правильно.

[WebMethod (Description="Add two floats.",

MessageName="Add2Floats") ]

public float Add(float si, float s2)

(return si + s2;}

[WebMethod (Description="Add two integers.", MessageName="Add2Integers") ] public int Add(int si, int s2)

(return si + s2;}

[WebMethod (Description="Add two three integers.”, MessageName="Add3Integers") ] public int Add(int si, int s2, int s3)

(return si + s2 + s3;}

Теперь, как видите, описания-«имена» WSDL стали уникальными.

КЕШИРОВАНИЕ В WEB-СЛУЖБЕ ASP.NET

Вы можете использовать кеширование для Web-службы ASP.NET, установив свойство CacheDuration атрибута WebMethod следующим образом:

[WebMethod (CacheDuration=30)]

Значение свойства CacheDuration указывает, сколько секунд система ASP.NET должна кешировать результаты. Вам следует задавать для свойства CacheDuration атрибута WebMethod значения больше нуля. По умолчанию в нем содержится значение нуль.

ТРАНЗАКЦИИ В WEB-СЛУЖБЕ ASP.NET

Вы можете задать «транзакционное» поведение (новую транзакцию) для Web-службы ASP.NET, для этого нужно выполнить следующие шаги:

  • 1. Добавьте ссылку на System.EnterpriseServices.dll.
  • 2. Используйте свойство TransactionOption атрибута WebMethod.

[WebMethod (TransactionOption=TransactionOptionRequiresNew)]

Пространство имен System.EnterpriseServices содержит методы и свойства, которые предоставляют для использования модель распределенных транзакций, заключенную в службах COM4-. Если в процессе выполнения транзакционного процесса Web-службы генерируется исключение, автоматически отбрасывается вся транзакция (используется метод SetAbort класса System.EnterpriseServices.ContextUtil). Если исключений не было, то транзакция автоматически закрывается (используется метод SetComplete класса System.EnterpriseServices.ContextUtil). Свойство TransactionOption атрибута указывает, какой метод Web-службы участвует в транзакции. Перечисление членов TransactionOption приведено в таблице Е.4.

Таблица Е.4. Перечисление членов TransactionOption

Элемент

Описание

Disabled

Игнорировать любые транзакции в текущем контексте

NotSupported

Создать компонент в контексте без транзакций

Required

Разделить транзакцию, если она существует; при необходимости создать новую транзакцию

RequiredNew

Создать компонент с новой транзакцией вне зависимости от состояния текущего контекста

Supported

Разделить транзакцию, если она существует

Свойство TransactionOption может принимать любое из этих значений. Однако перечисление TransactionOption метода Web-службы предусматривает только два варианта поведения:

  • ? не участвовать в транзакции (Disabled, NotSupported, Supported);
  • ? создать новую транзакцию (Required, RequiredNew).

По умолчанию выбрано значение TransactionOption.Disabled.

Управление сеансом

Свойство EnableSession атрибута WebMethod позволяет управлять состоянием сеанса метода Web-службы. Для этого нужно выполнить следующее:

  • ? добавьте ссылку на пространство имен System.WebServices;
  • ? установите свойство EnableSession атрибута WebMethod в true, как показано ниже.

[WebMethod(EnabIeSession=true)]]

Public string SessionCount()

{

// код }

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >