Книга: C# для профессионалов. Том II
WSDL
WSDL
WSDL полностью описывает службы Web, доступные методы и различные способы вызова этих методов. Все детали этого опять же не так уж важны, но общее понимание будет полезно.
WSDL имеет синтаксис, полностью соответствующий XML, и определяет службы Web по доступным методам, типам данных, используемых этими методами, форматам сообщений запросов и ответов, посылаемых методам и из методов с помощью различных протоколов (чистый SOAP, HTTP GET и т.д.), и различным связываниям между упомянутыми выше элементами.
Возможно, что наиболее важной частью файла WSDL является раздел определения типов данных. Он использует схемы XML для описания формата обмена данными и их отношениями с помощью элементов XML.
Например, метод службы Web, использованной в качестве примера в последнем разделе:
int DoSomething(string stringParam, int intParam)
будет иметь типы, объявленные для запроса следующим образом:
<?xml version="1.0" ?>
<definitions xmlns:s="http://www.w3.org/2000/10/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/"
... другие пространства имен ... >
<types>
<s:schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://tempuri.org/">
<s:import namespace="http://www.w3.org/2000/10/XMLSchema" />
<s:element name="DoSomething" >
<s:complexType>
<s:sequence>
<s:element name="stringParam" nullable="true" type="s:string" />
<s:element name="intParam" nullable="true" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="DoSomethingResponse">
<s:complexType>
<s:sequence>
<s:element name="DoSomethingResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="int" type="s:int" />
</s:schema>
</types>
... другие определения ...
</definitions>
Все, что требуется для запросов и ответов SOAP и HTTP, которые мы видели ранее, определяется этими типами, которые далее в этом файле связываются с такими операциями. Все типы определяются с помощью стандартного синтаксиса схемы XML, например:
<s:element name="DoSomethingResponse">
<s:complexType>
<s:sequence>
<s:element name="DoSomethingResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>
Этот код определяет, что элемент с именем <DoSomethingResponse>
имеет элемент-потомок с именем <DoSomethingResult>
, который содержит целое число.
Если мы имеем доступ к коду WSDL для службы Web, то мы можем его использовать. Как мы скоро увидим, это не так уж трудно сделать.
Теперь, когда мы кратко ознакомились с SOAP и WSDL, пришло время посмотреть, как создаются и используются службы Web.
- Преобразование WSDL-кода в программный код агента для клиента
- Устранение конфликтов имен WSDL с помощью свойства MessageName
- Преобразование WSDL-кода в серверный программный код Web-сервиса
- Просмотр WSDL-документа
- Язык описания Web-сервисов (WSDL)
- Определение WSDL-документа
- Утилита командной строки wsdl.exe