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

 

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

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

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

на клиенте код, к потом преобразовывать промежуточные результа-
ты в XML; чтобы с их помощью вызывать опять-таки методы С#, но уже на web-службе. Как было бы удобно работать напрямую!
768 Глава 15 * Web-службы
В общем, мсчтм ужесталн реальностью. Рекомендуется не обращаться на web-службу из клиента напрямую (хотя этого никто тоже не запрещает), а вначале создать промежуточную прокси-сборку на привычном С# или другом языке программирования и обращаться именно кней — а она уже будет сама перенаправлять запросы на web-службу, получать возвращаемые результаты и передавать их вызывающему клиенту (который может быть обычным клиентом Windows Forms, или консольным, или клиентом ASP.NET - каким угодно). Самое замечательное во всем этом то, что прокси-сборка создается автоматически — при помощи Visual Studio.NET или специализированной утилиты wsdl.exe. А теперь посмотрим, как это делается.
Создание прокси-сборки при помощи утилиты! wsdl.exe
Один из возможных способов сгенерировать прокси-сборку — воспользоваться утилитой wsdLexe, входящей в состав .NET SDK. Минимально необходимый синтаксис ее очень прост:
wsdl.exe /out:C\calcproxy.cs http://1ocalhost/calcwebservice/caicserv1ce.asmx?USDL
Параметр /out — это, конечно, имя создаваемого исходного файла для прокси-сборки. Далее указывается адрес RL по которому может быть получено описание web-службы в формате WSDL (см. например, гиперссылку на рис. 15.9). По умолчанию генерируется именно код С#, однако по нашему желанию может быть сгенерирован код и на Visual Basic.NET, и на JavaScript.NET. Дополнительные параметры командной строки для wsdl.exe приведены в табл. 15.9.
Таблица 15.9. Параметры командной строки утилиты wsdl.exe
Параметр Описание " 'Z~7~~l™~~_~~~" '
/lfanguage]: Определяет язык, на котором будет сгенерирован исходный код для прокси-сборки. Допустимые параметры — CS (по умолчанию), VB и JS
Mamespace]: Определяет пространство имен для генерируемой сборки. По умолчанию будет использовано глобальное пространство имен
//out: Определяет имя файла, в котором будет сохранен сгенерированный код.
По умолчанию используется имя файла, создаваемое на основе имени web-службы
/protocol: Определяет, по какому протоколу создаваемая прокси-сборка будет обращаться на web-службу. Поумолчанию используется значение SOAP, можно также использовать значения HttpGetn HttpPost. Можно использовать также свой собственный пользовательский протокол, но тогда его надо будет определить в специальном файле конфигурации
Как выглядит исходный код генерируемой прокси-сборки
В отличие от множества других предусмотренных в (для ра-
боты с СОМ, СОМ+ и т. п.), прокси-сборки для web-служб создаются в виде файлов с исходным кодом, а не откомпилированным. Поэтому будет особенно интересно заглянуть в генерируемый файл и посмотреть, что нами было создано. Выглядит все это так (обратите внимание на атрибут WebServiceBinding):
using System.Xml.Serialization: using System:
Прокси-сборки для web-служб 769
usi ng System.Web.Serices.Protocols: using System.Web. Services:
[System.Web.Services.WebServiceBireiingAttribute(Name="ServicelSoap". Namespace= "http-.//
tempuri,org/")]
public class Service! ; System Web. Service.= -Protocols. SoapHttpClientProtocol {
public ServlceK) f
this. UrI = "http://localhost/calcwebservice/calcservice.asmx":
}
}
Как мы видим, информация о том, где находится ул^Ъ-смужби, помещается при помощи свойства в объект класса прямо во время работы конструктора. Еще один важный момент: класс нашей прокси-сборки — это класс, производный от базового класса S oapHttpCl і entProtocol. В этом базовом классе и определены те возможности, с помощью которых наша прокси-сборка будет взаимодействовать с web-службой. Некоторые наиболее важные члены, унаследованные от SoaphttpCl і entProtocc 1, представлены в табл. 15,10.
Таблица 15.10. Наиболее важные унаследованные члены Член Описание
BeginlnvokeO Производит асинхронный вызов метода web-службы EndlnvokeO Завершает асинхронный вызов метода web-службы InvokeO Производит синхронный вызов метода web-службы
Proxy Позволяет получить или установить инсрормацию о настройках прокси-сервера
для обращения к web-службе через брандмауэр
Timeout Позволяет получить или установить тайм-аут (в миллисекундах), в течение
которого прокси-сборка будет ожидать возврата результатов при синхронном вызове метода web-службы
Ud Позволяет получить или установить адрес URL для web-службы
UserAgert Позволяет получить или установить значение заголовка user agent для
производимых запросов (то есть каким браузером будет представляться данная прокси-сборка web-службе)
В сгенерированной прокси-сборке автоматически генерируются определения методов для синхронного и асинхронного вызова каждого метода web-службы. Вещь очевидная, но мы все же ее озвучим специально: при синхронном вызове метода выполнение приостанавливается до возврата результатов с wrb-службы а при асинхронном методе сразу после вызова управление возвращается клиенту. Когда выполнение метода, вызванного асинхронным способом, завершено, среда выполнения производит обратный вызов прокси-сборки. Реализация синхронного вызова метода Add С) в сгенерированной прокси-сборке будет выглядеть так:
Предыдущая << 1 .. 303 304 305 306 307 308 < 309 > 310 311 312 313 314 315 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100