Свойство MessageName позволяет назначать web-методу имя, отличное от того, которое ему было назначено при написании класса web-сервиса.
Существует возможность создавать в web-сервисе web-методы с одинаковыми именами. Но при попытке просмотра страницы такого web-сервиса будет сгенерирована ошибка. Свойство MessageName используется именно в этих случаях.
Допустим кроме веб метода GetCustOrders с одним параметром (код клиента) у нас объявлен еще один метод GetCustOrders, принимающий кроме кода клиента также вилку дат и возвращающий DataSet с информацией о заказах, дата которых находится между указанными датами
[WebMethod(Description=" Возвращает список заказов для указанного клиента ")]public DataSet GetCustOrders(string CustomerID){...}[WebMethod(MessageName="GetCustOrdersByDate")]public DataSet GetCustOrders(string CustomerID, DateTime startDate, DateTime endDate){...}Теперь, хотя оба web-метода и имеют одинаковое имя, все равно есть возможность использовать страницу web-сервиса. При этом в прокси классе оба метода естесственно будут определены с именем GetCustOrders.
TransactionOption
Web-сервисы ограниченно поддерживают транзакции. С помощью свойства TransactionOption можно управлять тем, как ваш метод использует транзакции. Это свойство может принимать следующие значения:
|
|
Disabled | Веб метод выполняется вне транзакции |
NotSupported | То же самое |
Supported | Если транзакция существует – метод выполняется в контексте этой транзакции, если же нет – выполнение идет вне транзакции |
Required | Метод требует наличия транзакции для выполнения. При этом всегда создается новая транзакция (аналогично RequiresNew). |
RequiresNew | Метод требует создания новой транзакции. Каждый раз при вызове метода создается новая транзакция. |
Слово «ограниченно» означает, что веб сервис может порождать транзакцию, но при этом не может быть участником другой транзакции. Если вызывается веб метод с TransactionOption установленным в Required или RequiresNew, а в нем вызывается другой веб метод с такими же установками, каждый из этих методов инициирует свою транзакцию.
По умолчанию свойство TransactionOption установлено в Required.
При нормальном завершении работы метода транзакция считается выполненной. Чтобы прервать выполнение транзакции, сгенерируйте исключение. В веб методе не нужно вызывать методы SetComplete и SetAbort.