Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 699
Эндрю Троелсен
Исходный код. Файл CarBizObject.wsdl размещен в подкаталоге, соответствующем главе 25.
Преобразование WSDL-кода в программный код агента для клиента
Хотя это и нежелательно, но вполне возможно построить базовый программный код клиента, которым будет вручную открывать HTTP-соединение, строить SOAP-сообщения, вызывать Web-методы и выполнять обратную трансляцию поступающего XML-потока в типы данных CTS. Намного более предпочтительным подходом оказывается использование wsdl.exe для генерирования класса агента, который будет представлять Web-методы, определенные данным файлом *.asmx.
Для этого укажите (как минимум) имя генерируемого файла агента (с помощью флага /out) и место размещения WSDL-документа. По умолчанию wsdl.exe генерирует программный код агента на языке C#. Однако если вы хотите иметь программный код агента на другом языке .NET, вы можете использовать флаг /language. Следует также знать, что по умолчанию wsdl.exe генерирует программный код агента, предполагающего связь с удаленным Web-сервисом XML с помощью SOAP. Чтобы созданный агент использовал HTTP-метод GET или POST. следует указать соответствующий протокол связи с помощью /protocol.
Другим важным моментом в отношении генерирования программного кода агента с помощью wsdl.exe является то, что этому инструменту действительно требуется
Для примера предположим. что вы создали новый виртуальный каталог IIS (CalcService), содержащий данные проекта CalculatorService. После этого вы можете сгенерировать программный код агента клиента так.
wsdl /out:proxy.cs http://localhost/CalcService/Secrvice.asmx?wsdl
В качестве замечания подчеркнем, что wsdl.exe не определяет пространство имен .NET для упаковки генерируемых типов C#. если вы не укажете в командной строке флаг /n.
wsdl /out:proxy.cs /n:CalculatorClient http://localhost/CalcService/ Service.asmx?wsdl
Программный код агента
Если открыть сгенерированный файл агента, вы найдете там тип, который получается из System.Web.Services.Protocols.SoapHttpClientProtocol (если, конечно, вы не указали другой протокол связи с помощью опции /protocol).
public partial class CalculatorWebService :
System.Web.Services.Protocols.SoapHttpClientProtocol {
…
}
Этот базовый класс определяет ряд членов, используемых в рамках реализации типа агента. Описания некоторых из этих членов предлагаются в табл. 25.7.
Таблица 25.7. Основные члены типа SoapHttpClientProtocol
Унаследованные члены | Описание |
---|---|
BeginInvoke() | Метод, инициирующий асинхронный вызов Web-метода |
CancelAsync() | Метод (новый в .NET 2.0), отменяющий асинхронный вызов метода Web-сервиса XML, если вызов еще не завершен |
EndInvoke() | Метод, завершающий асинхронный вызов Web-метода |
Invoke() | Метод для синхронного вызова метода Web-сервиса |
InvokeAsync() | Метод (новый в .NET 2.0), предлагающий более предпочтительный вариант асинхронного вызова метода Web-сервиса |
Proxy | Свойство, получающее или устанавливающее информацию агента для запроса Web-сервиса через брандмауэр |
Timeout | Свойство, получающее или устанавливающее значение времени ожидания (в миллисекундах) для синхронных вызовов |
Url | Свойство, получающее или устанавливающее базовое значение URL сервера для запросов |
UserAgent | Свойство, получающее или устанавливающее значение для заголовка пользовательского агента в запросах |