‹soap12:operation soapAction="http://www.IntertechTraining.com/Subtract" style="document" /›
‹wsdl:input›
‹soap12:body use="literal" /›
‹/wsdl:input›
‹wsdl:output›
‹soap12:body use="literal" /›
‹/wsdl:output›
‹/wsdl:operation›
‹/wsdl:binding›
Наконец, у нас есть элемент ‹service›, который указывает характеристики самого Web-сервиса (например, его URL). Главной задачей этого элемента является описание множества портов, открытых данным Web-сервером. Для этого элемент ‹services› может использовать любое число вложенных элементов ‹port› (не путайте их с элементом ‹portType›). Вот как выглядит элемент ‹service› для CalculatorWebService.
‹wsdl:service name="CalculatorWebService"›
‹wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"›
Чудесный Web-сервис калькулятора
‹/wsdl:documentation›
‹wsdl:port name="CalculatorWebServiceSoap" binding="tns:CalculatorWebServiceSoap" ›
‹soap:address location="http://localhost:1109/CalculatorWebService/ Service.asmx" /›
‹/wsdl:port›
‹wsdl:port name="CalculatorWebServiceSoap12" binding= "tns:CalculatorWebServiceSoap12"›
‹soap12:address location="http://localhost:1109/CalculatorWebService/Service.asmx" /›
‹/wsdl:port›
‹/wsdl:service›
Итак, как видите, WSDL-код, автоматически возвращаемый сервером ITS, не является сверхсложным, но, поскольку WSDL представляет собой грамматику на основе XML, этот код достаточно "многословен". Тем не менее, теперь вы должны лучше понимать роль WSDL, так что давайте рассмотрим немного подробнее протоколы связи Web-сервисов XML.
Замечание. Напомним, что пространство имен System.Web.Services.Description содержит множество типов, которые позволяют программно читать и обрабатывать "сырой" WSDL-код (можете проверить сами, если вас это интересует).
Строго говоря, Web-сервисы XML могут использовать для коммуникации любой RPC-протокол (например, DCOM или CORBA). Однако большинство Web-серверов встраивает соответствующие данные в тело HTTP-запроса и переправляет их адресату, используя для этого один из трех базовых способов связи (табл. 25.4).
Хотя каждый из подходов обеспечивает один и тот же результат (вызов Web-метода), от выбора протокола зависит то, какие типы параметров (и типы возвращаемых значений) могут пересылаться между заинтересованными сторонами. Протокол SOAP предлагает наибольшую гибкость, поскольку сообщения SOAP позволяют осуществлять обмен сложными типами данных (а также двоичными файлами) между вызывающей стороной и Web-сервисом XML. Однако для полноты давайте выясним роль стандартных HTTP-методов GET и POST.
Таблица 25.4. Режимы связи Web-сервисов XML
Режим связи | Описание |
---|---|
HTTP-метод GET | В режиме обмена GET параметры добавляются к строке запроса данного URL |
HTTP-метод POST | В режиме обмена POST данные встраиваются в заголовок HTTP-сообщения, а не добавляются к строке запроса |
SOAP | SOAP является протоколом связи, определяющим правила передачи данных и вызова методов в сети с помощью XML |
Хотя GET и POST кажутся привычными конструкциями, этот метод пересылки недостаточно гибок для обслуживания таких сложных элементов, как структуры и классы. При использовании SET и POST вы можете взаимодействовать с Web-методами, используя только типы, указанные в табл. 25.5.
Таблица 25.5. Типы данных, поддерживаемые методами GET и POST