Предположим, что вы создали WSDL-документ (CarBizObject.wsdl), в котором описывается единственный метод DeleteCar, получающий на вход целое число и не возвращающий ничего. Этот метод предлагается Web-сервисом XML с именем CarBizObject, который может вызываться с использованием связи SOAP.
Чтобы сгенерировать серверный файл программного кода C# на основе этого WSDL-документа, откройте окно командной строки .NET и вызовите утилиту wsdl.exe с флатом /serverInterface, за которым должно следовать имя соответствующего WSDL-документа. Заметьте, что WDSL-документ может содержаться либо в локальном файле *.wsdl:
wsdl /serverInterface CarBizObject.wsdl
либо получаться динамически по данному URL с помощью указания суффикса ?wsdl:
wsdl /serverInterface http://localhost/CarService/CarBizObject.asmx?wsdl
После того как wsdl.exe обработает соответствующие XML-элементы, вы получите описания интерфейсов для каждого Web-метода.
[System.Web.Services.WebServiceBindingAttribute(
Name="CarBizObjectSoap",
Namespace="http://IntertechTraining.com/")]
public partial interface ICarBizObjectSoap {
…
void RemoveCar(int carID);
}
Используя эти интерфейсы, вы можете определить класс, реализующий различные методы Web-сервиса XML.
Исходный код. Файл 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:CalculatorClientService.asmx?wsdl
Программный код агента
Если открыть сгенерированный файл агента, вы найдете там тип, который получается из System.Web.Services.Protocols.SoapHttpClientProtocol (если, конечно, вы не указали другой протокол связи с помощью опции /protocol).
public partial class CalculatorWebService :
System.Web.Services.Protocols.SoapHttpClientProtocol {
…
}
Этот базовый класс определяет ряд членов, используемых в рамках реализации типа агента. Описания некоторых из этих членов предлагаются в табл. 25.7.
Таблица 25.7. Основные члены типа SoapHttpClientProtocol