Книга: C# для профессионалов. Том II
SOAP
SOAP
Как упоминалось выше, одним из способов обмена данными со службами Web является SOAP. Эта технология широко обсуждалась в прессе, особенно с тех пор, как компания Microsoft решила принять ее для использования на платформе .NET. Теперь волнение, кажется, слегка успокоилось, так как спецификация SOAP была завершена. Если подумать, то знание того, как точно работает SOAP, похоже на знание того, как работает HTTP, в принципе это интересно, но не существенно. Большую часть времени нам нет необходимости беспокоиться о формате сделанного со службами Web обмена, он просто происходит, а мы получаем требуемый результат, и все довольны.
По этой причине здесь не будет представлено подробное рассмотрение, но будет показано несколько простых запросов и ответов SOAP, чтобы можно было получить некоторое представление о том, что происходит за сценой.
Давайте предположим, что необходимо вызвать метод службы Web, имеющий следующую сигнатуру.
int DoSomething(String stringParam, int intParam)
Далее представлены требуемые для этого заголовки SOAP и body. Вверху указан адрес службы Web (об этом больше будет сказано далее):
POST /SomeLocation/myWebService.asmx HTTP/1.1
Host: karlivaio
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/DoSomething"
<?xml version="1.0"?>
<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>
<DoSomething xmlns="http://tempuri.org/">
<stringParam>string</stringParam>
<intParam>int</intParam>
</DoSomething>
</soap:Body>
</soap:Envelope>
Параметрlength
определяет здесь общую длину содержимого в байтах и будет меняться в зависимости от значений, посланных в параметрахstring
иint
.
Используемое пространство имен soap определяет различные элементы, которые применяются для создания сообщения. При отправке этого кода через HTTP реальные посылаемые данные будут несколько другими. Например, можно было бы вызвать приведенный выше метод с помощью простого метода GET:
GET /PCSWebSrv1/Service1.asmx/AddEvent?stringParam=string&intParam= int HTTP/1.1 Host.: hostname
Ответ SOAP этого метода будет следующим:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" ?>
<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: length
<?xml version="1.0"?>
<int xmlns="http://tempuri.org/">int</int>
Это совсем простой формат XML.
Как упоминалось в начале раздела, все это можно полностью игнорировать. Только при необходимости сделать что-то действительно необычное точный синтаксис становится важным, но такие случаи выходят за рамки этой книги.
- SOAPSuds
- 5.4.4. XML-RPC, SOAP и Jabber
- Классы, интерфейсы и SOAPSuds
- Связь SOAP
- Сериализация объектов с помощью SoapFormatter
- Преобразование WSDL-кода в программный код агента для клиента
- The ABCs of WCF
- Comparing WCF with ASMX Web Services
- Your First WCF Service
- Элемент ‹service›
- Удаленный доступ
- WSDL