Иллюстрированный самоучитель по Architecture .NET

Клиент для Web-службы Add (Сложение)

Затем появится окно Internet Explorer, в котором будет отображена часть данных ответа, сгенерированного Web-службой и передаваемого ею по протоколу передачи гипертекстовых файлов HTTP. Фактическое возвращаемое значение (результат) содержится среди этих данных.

<?xml version="1.0" encoding="utf-8"?>
<int xmlns="http://tempuri.org/">9</int>

Возвращаемые данные имеют формат, определенный в описании протокола, однако вместо метки-заместителя подставлен ответ (9). Следует обратить внимание, что по протоколу HTTP GET могут передаваться лишь простые типы данных.

Более интересным является протокол SOAP. Он кодирует запросы и ответы с помощью метода POST протокола передачи гипертекстовых файлов HTTP. Данные, которые фактически передаются в запросе, подставляются вместо меток-заполнителей. В листинге метки-заполнители выделены жирным шрифтом.

Сначала мы рассмотрим формат запросов протокола SOAP, передаваемых с помощью метода POST протокола передачи гипертекстовых файлов HTTP. Первая часть такого запроса содержит набор заголовков, относящийся к протоколу передачи гипертекстовых файлов HTTP. В информационной части (в разделе данных) запроса (теле объекта), передаваемого по протоколу передачи гипертекстовых файлов HTTP, содержатся данные. Для описания этих данных протокол SOAP использует язык XML. Описание данных всегда отделяется от заголовков пустой строкой. Заголовок content-length (длина содержимого) определяет длину данных, которая зависит от размера параметров в информационной части (в разделе данных) запроса.

Заголовок method (метод) указывает файл, которому будет направлен запрос Здесь также можно указать имя объекта, который будет обрабатывать запрос (конечную точку) В заголовке SOAPAction (SOAP-Действие) указывается имя метода, который вызывается Web-службой, и пространство имен, которому он принадлежит [Читатели, знакомые с моделью компонентных объектов Microsoft (COM), увидят аналогию между описанием методов с помощью пространства имен и определением глобально уникального идентификатора интерфейса (Interface IdentifierIID) с помощью глобально уникального идентификатора (Globally Unique IdentifierGUID)].

Для описания параметров метода в протоколе SOAP используется язык XML [Аналогом языка описания интерфейсов (Interface Definition LanguageIDL), используемого в модели компонентных объектов Microsoft (COM), является язык описания Web-служб (Web Services Description LanguageWSDL), который будет рассмотрен несколько позже. Протокол 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>
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.