Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 305

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 299 300 301 302 303 304 < 305 > 306 307 308 309 310 311 .. 320 >> Следующая

Yet another way to add numbers! . Subtract

"ГТ
jgg local Шгп&~
Рис. 15.7. Параметр Description в действии
Если поинтересоваться, что же происходит при добавлении к методу Параметра Description, то окажется, что в коде WSDL (об этом - позже) файла \asmx появился дополнительный тег documentations
<operataion name="Add">
<input Мйед^ОДМйЭДШ)' /> <output message="so:AddSoapOut" />
<documentation>Yet another way to add numbers!</documentation>
</operation>
Параметр Description - не единственный, который можно использовать для атрибута WebMethod. Наиболее важные параметры этого атрибута представлены в табл. 15.4,
Таблица 15.4. Параметры! атрибута WebMethod
Параметр
Описание
Description Позволяет добавить дружественное описание для метода web-службы
При установленном значении true (по умолчанию) для метода можно использовать данные сеанса подключения (например, определять, сколько раз в течение сеанса он был вызван пользователем)
MessageName Этот параметр можно использовать, чтобы определить, как метод
web-службы будет представлен в коде WSDL Обычно он применяется для того, чтобы не допустить конфликты имен
TransactionOption Методы web-службы могут использоваться в качестве корня транзакции СОМ+. Для этого параметра используются значения из перечисления System. Епїефгі5е5егуісе5.Тгап5асаопОриоп
Тип WebMethorJAttribLite 759
Давайте рассмотрим на примере, для чего нужен параметр fessacjeMace. Псе;",~тс-ложим, что в нашем web-калькуляторе появился дополнительный метод Add () для сложения двух значений с плавающей запятой:
[WebMethotKDescription - "Add 2 integers."і] public int Add (int x. int у) { return x + у: }
[WebMethcxKOescription = "Add 2 floats.")]
puDlic float AcfcK float x. float y) { return x + y; }
Если мы попробуем откомпилировать наш проект, то никаких ошибок не будет — с точки зрения С# все в порядке. Однако если мы попытаемся обратиться к web-службе из браузера, мы увидим не совсем то, на что рассчитывали:
System. Exception: Both Single AckKSIngle. Single) and Int32 Add(int32. Int32) use the
message name 'Add'.
(System.Exception: И нетод Single Add(Single. Single), и метод Int32 Add(int32. Int32) используют имя сообщения 'Add'.)
Конфликт имен произошел на уровне WSDL: необходимо, чтобы для каждого атрибута <soap:operation soapAction> (который используется для идентификации метода web-службы) использовалось уникальное значение (то есть имя Однако по умолчанию значением этого атрибута считается
имя метода в определении этого метода в С#. Чтобы решить проблемы с конфликтом имен, достаточно для одного из методов добавить новое значение параметра MessageName:
[UebMethodtDescription = "Add 2 integers.")] public int AddCint x, int y) { return x + y: }
[WebMethodCDescrlptlon = "Add 2 f 1 oats.". MessageName = "AddFloats")] public float Add(float x. float y) { return x + y: }
После этого идентификаторы методов WSDL станут разными: <operation name="Add">
<soap:operation soapAction*"http://ternpuri .org/AddFloats" style="document" /> <input name="AddFloats">
<soap:body use="l iteral "/> </input>
<output narde»"AddFloats">
<soap:body use="literal" /> </output> </operation>
operation name="Add">
<soap:operation soapAction="http://tempuri.org/Add" styl е-"document" /> <i nput>
<soap:bodyuse="l iteral" /> </input> <output>
<soap:body use="literal" /> </output> ¦;/operation>
Если нам потребуется использовать описание для всей нашей web-службы, а и е для отдельного метода, можно использовать для класса С# атрибут с
аналогичным параметром і)о:>с^ і pt например, так:
760 Глава 15 • Web-службы
Если мы запустите нашу web-службу после этого добавления, результат будет таким, как показано на рис. 15.8.
3|S<'ivi(el Web Service -MkrosoK Inter netli-i*»*"
Pis fcdit Vjsw Favorites Tools Hsfp
** r Ф Ш dl ] [?Persofial Bar ^Search [JJ Favorites
Address
JgJ :--.¦,¦<./¦::¦¦¦.:¦.¦.¦.¦¦¦¦¦¦¦¦¦¦.,,¦.¦¦ _?j ,"Ne j links
Serviced
The painfully simpfe web series
The following орєгахп^їі^. supported. For a formal cennm
..Ll
1?] Dona
j j
Local intranet
Рис. 15.8. Параметр Description атрибута WebService определяет описание для web-службы в целом
Базовый класс System.Web.Services.WebService
Как мы уже заметили, по умолчанию Visual Studio.NET производит класс нашей web-службы от базового класса SyStem.Web.Servic.es.WebService. В принципе web-
служба будет работать и без этого класса в качестве базового, однако в WebService
предусмотрен набор очень полезных членов и вложенных типов, которые обеспечивают web-службе те же возможности, которые имеются у стандартного приложения ASP.NET. Обычно в программном коде приходится взаимодействовать со свойствами класса web-службы, унаследованными от WebService. Наиболее важные свойства WebServi се представлены в табл. 15.5.
Таблица 15.5. Наиболее важные свойства класса WebService Свойство Описание
Application Context
Server
Session
User
Возвращает ссылку на объект HttpApplicationState для текущего запроса HTTP
Предыдущая << 1 .. 299 300 301 302 303 304 < 305 > 306 307 308 309 310 311 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100