<soap:Envelope xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance'
xmlns:xsd='http://www.w3.org/2000/10/XMLSchema'
xmlns:soap='http://schemas.xmlsoap.org/soap/envelope'>
<soap:Body>
<DoSomethingResponse xmlns='http://tempuri.org/'>
<DoSomethingResult>int</DoSomethingResult>
</DoSomethingResponse>
</soap:Body>
</soap:Envelope>
гдеlength
int
.
И снова реальный ответ через HTTP может быть значительно проще, например:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length:
<?xml version='1.0'?>
<int xmlns='http://tempuri.org/'>int</int>
Это совсем простой формат XML.
Как упоминалось в начале раздела, все это можно полностью игнорировать. Только при необходимости сделать что-то действительно необычное точный синтаксис становится важным, но такие случаи выходят за рамки этой книги.
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.
Службы Web
Обсуждение служб Web включает два вопроса:
□ Создание служб Web, которое связано с написанием служб Web и размещением их на серверах Web.
□ Использование служб Web, которое связано с применением на стороне клиента созданных служб.
Создание служб Web