Полный анализ возможностей SOAP выходит за рамки этого текста, однако следует понимать, что SOAP нельзя назвать специальным протоколом, который может использоваться наряду с другими существующими протоколами Интернет (HTTP, SMTP и др.). Общая задача SOAP, тем не менее, остается той же: обеспечить независимый от языка и платформы механизм вызова методов, использующих составные типы. Для этого SOAP преобразует каждый метод в сообщение SOAP.
Сообщение SOAP состоит из двух основных секций. Во-первых, есть конверт SOAP, который можно понимать, как абстрактный контейнер для соответствующей информации. Во-вторых, есть правила, которые используются для описания информации в сообщении (размещаемой в теле сообщения SOAP). Необязательная третья секция (заголовок SOAP) может использоваться для того, чтобы указать общую информацию, касающуюся самого сообщения (например, информацию безопасности или транзакции).
‹soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"›
‹soap:Header›
‹!-- Необязательная информация заголовка --›
‹/soap:Header›
‹soap:Body›
‹!-- Информация вызова метода --›
‹/soap:Body›
‹/soap:Envelope›
Просмотр сообщения SOAP
Хотя при создании Web-сервиcов XML в рамках платформы .NET от вас не требуется понимания всех деталей SOAP, вы можете увидеть формат сообщения SOAP дня каждого доступного Web-метода с помощью автоматически генерируемой страницы тестирования. Например, если щелкнуть на ссылке для метода Add() нашего CalculatorWebService, вы увидите следующий запрос SOAP 1.1.
‹soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/ "›
‹soap:Body›
‹Add xmlns="http://www.IntertechTraining.com"›
‹x›int‹/x›
‹y›int‹/y›
‹/Add›
‹/soap:Body›
‹/soap:Envelope›
Соответствующий ответ SOAP 1.1 выглядит так.
‹soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"›
‹soap:Body›
‹AddResponse xmlns="http://www.IntertechTraining.com "›
‹AddResult › int‹/AddResult›
‹/AddResponse›
‹/soap:Body›
‹/soap:Envelope›
Утилита командной строки wsdl.exe
Теперь, когда у вас есть базовые знания о WSDL и SOAP, давайте выясним, как с помощью такого инструмента командной строки, как wsdl.exe строить программы клиента, взаимодействующие с удаленными Web-сервисами XML. В сущности, wsdl.exe решает две важные задачи.
• Генерирование файла сервера, функционирующего в качестве каркаса для реализации Web-сервиса XML.
• Генерирование файла клиента, функционирующего в качестве агента удаленного Web-сервиса XML.
Утилита wsdl.exe поддерживает ряд флагов командной строки, список которых можно увидеть, указав при вызове этой утилиты опцию -? в командной строже. Описания некоторых аргументов wsdl.exe приводятся в табл. 25.6.
Таблица 25.6.Подборка опций wsdl.exe
Флаг командной строки |
Описание |
/appsettingurlkey |
Дает указание wsdl.exe создать агент, не использующий "жестко" заданные значения URL. Вместо этого класс агента будет настроен на чтение значений URL из файла *.config клиента |
/language |
Указывает язык для использования в генерируемом классе агента: cs (C#; это значение используется по умолчанию), VB (Visual Basic .NET), JS (JScript), VJS (Visual J#) |
/namespace |
Указывает пространство имен для генерируемого агента или шаблона. По умолчанию сам тип в рамках определения пространства имен не определяется |
/out |
Указывает файл, в котором нужно сохранить программный код генерируемого агента. Если файл не указан, имя файла будет соответствовать имени Web-сервиса XML |
/protocol |
Указывает протокол, используемый в программном коде агента, по умолчанию это SOAP. Но можно также указать HttpGet или HttpPost, чтобы создать агент, использующий для взаимодействия HTTP-методы GET или POST |
/serverInterface |
Генерирует интерфейсные связи сервера для Web-сервиса XML на основе WSDL-документа |
Замечание.Флаг /server утилиты wsdl.exe в .NET 2.0 больше не используется. Теперь базовый программный код для сервера генерируется с помощью /serverlnterfасе.
Преобразование WSDL-кода в серверный программный код Web-сервиса
Одним из интересных вариантов использования утилиты wsdl.exe является генерирование серверного программного кода на основе WSDL-документа (с помощью опции /serverInterfасе). Очевидно, если вы начинаете разработку Web-сервиса XML с создания WSDL-документа, эта опция должна быть для вас очень важна. После того как файл исходного кода будет сгенерирован, вы получите хорошую исходную позицию для реализации каждого Web-метода.
Читать дальше