Более интересным является протокол SOAP Он кодирует запросы и ответы с помощью метода POST протокола передачи гипертекстовых файлов HTTP Данные, которые фактически передаются в запросе, подставляются вместо меток-заполнителей В листинге метки-заполнители выделены жирным шрифтом
Сначала мы рассмотрим формат запросов протокола SOAP, передаваемых с помощью метода POST протокола передачи гипертекстовых файлов HTTP Первая часть такого запроса содержит набор заголовков, относящийся к протоколу передачи гипертекстовых файлов HTTP В информационной части (в разделе данных) запроса (теле объекта), передаваемого по протоколу передачи гипертекстовых файлов HTTP, содержатся данные Для описания этих данных протокол SOAP использует язык XML Описание данных всегда отделяется от заголовков пустой строкой Заголовок content-length (длина содержимого) определяет длину данных, которая зависит от размера параметров в информационной части (в разделе данных) запроса
Заголовок method (метод) указывает файл, которому будет направлен запрос Здесь также можно указать имя объекта, который будет обрабатывать запрос (конечную точку) В заголовке SOAPAction (SOAP-Действие) указывается имя метода, который вызывается Web-службой, и пространство имен, которому он принадлежит [Читатели, знакомые с моделью компонентных объектов Microsoft (COM), увидят аналогию между описанием методов с помощью пространства имен и определением глобально уникального идентификатора интерфейса (Interface Identifier— IID) с помощью глобально уникального идентификатора (Globally Unique Identifier — GUID) ].
Для описания параметров метода в протоколе SOAP используется язык XML [Аналогом языка описания интерфейсов (Interface Definition Language — IDL), используемого в модели компонентных объектов Microsoft (COM), является язык описания Web-служб (Web Services Description Language — WSDL), который будет рассмотрен несколько позже Протокол SOAP является аналогом сетевого формата NDR (Network Data Representation), который используется в распределенной модели компонентных объектов DCOM (Distributed Component Object Model) Все параллели, которые можно провести между технологией Web стужб и моделью компонентных объектов Microsoft (COM), описаны в статье Дона Бокса (Don Box) A Young Person's Guide to the Simple Object Access Protocol (Руководство для молодого человека по Простому протоколу доступа к объектам) которая появилась в 2000 году в мартовском выпуске собрания документов компании Microsoft MSDN (Microsoft Developer Network)]. В информационной части (теле) SOAP-запроса содержатся параметры, передаваемые вызываемому методу При реальном вызове метода вместо меток-заполнителей int будут подставлены фактические параметры, которые нужно передать методу Web-службы
POST /SimpleWebService/Add.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http.//tempuri.org/Add"
<">xml version="l 0" encoding="utf-8'"5>
<soap:Envelope xmlns xsi="http://www.w3 org/2001/XMLSchemainstance"
xmlns:xsd="http.//www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Add xmlns="http //tempun.org/"> <x>int</x> <y>int</y> </Add>
</soap.Body> </soap:Envelope>
Ниже мы опишем ответ, передаваемый по протоколу SOAP с помощью метода POST протокола передачи гипертекстовых файлов HTTP В ответе метка-заполнитель int замещается фактическим возвращаемым значением
НТТР/1.1 200 ОК
Content-Type: text/xml; charset=utf-8
Content-Length, length
<?xml version="1.0" encoding="utf-8'">>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xmlns:xsd="http.//www.w3 org/2001/XMLSchema"
xmlns soap="http //schemas.xmlsoap org/soap/envelope/">
<soap.Body>
<AddResponse xmlns="http //tempuri org/">
<AddResult>int</AddResult>
</AddResponse>
</soap.Body>
</soap:Envelope>