Программирование >>  Программирование с использованием ajax 

1 ... 223 224 225 [ 226 ] 227 228 229 ... 396


Сообщение SOAP

Конверт SOAP

Заголовок SOAP

Тело SOAP

Рис. 21.3. Части сообщения SOAP

Следующий пример демонстрирует, как выглядит сообщение SOAP, отправленное клиентом серверу. Клиент вызывает метод ReverseString () Web-службы. Строка Hello World! передается этому методу в качестве аргумента. Как видите, вызов метода расположен внутри тела SOAP, внутри XML-элемента <soap: Body>. Само тело содержится внутри конверта <soap: Envelope>. Перед сообщением SOAP расположен заголовок HTTP, поскольку сообщение SOAP отправляется с помощью POST-запроса HTTP. Создание такого сообщения не обязательно, поскольку оно создается прокси-клиентом:

POST /Servicel.asmx HTTP/1.1 Host: localhost

Content-Type: text/xml; charset=utf-8 Content-Length: 508

SOAPAction: http: www.wrox.com/webservices/ReverseString <?xml version= l.0 encoding= utf-8 ?>

<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>

<ReverseString xmlns= http: www.wrox.com/webservices > <message>Hello World!</message> </ReverseString> </soap:Body> </soap:Envelope>

Как видно из XML-элемента ReverseStringResult, сервер отвечает 50АРч:ообще-нием !dlroW olleH:

HTTP/1.1 200 OK

Content-Type: text/xml; charset=utf-8 Content-Length: 446

<?xml version= l.0 encoding= utf-8 ?>

<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>

<ReverseStringResponse xmlns= http: www.wrox.com/webservices > <ReverseStringResult>!dlroW olleH</ReverseStringResult> </ReverseStringResponse> </soap:Body> </soap:Envelope>



Поддержку спецификации SOAP осуществляет рабочая группа протокола XML консорциума W3C (www. w3 . org/TR/soap).

SOAP и брандмауэры

Системные администраторы часто задают вопрос о том, нарушает ли протокол SOAP границы безопасности брандмауэров - иными словами, не противоречит ли SOAP концепции брандмауэров? Фактически в данном случае приходится учитывать не больше аспектов безопасности, чем при использовании обычных Web-серверов. При обычных брандмауэрах Web-серверов для предоставления серверу возможности обмена данными с внешним миром системный администратор открывает НТТР-порт 80. Пользователи в Internet могут иметь прямой доступ к этим серверам, даже находясь позади брандмауэра. Пользователь может запросить HTML-файл с помощью HTTP-запроса, а сервер возвращает либо статическую страницу, либо страницу, созданную на лету посредством сценариев ASP или CGL Web-службы - это всего лишь еще один тип серверного приложения, которое осуществляет обмен данными посредством HTTP, хотя при этом вместо приема простых HTTP-запросов GET или post оно принимает HTTP-запрос POST, содержащий внедренное сообщение SOAP, а вместо возврата HTML-ответа оно возвращает HTTP-ответ, содержащий ответное сообщение SOAP. До тех пор пока брандмауэр действует, обмен данными выполняется по HTTP и, следовательно, он разрешен через порт 80.

Однако если эта Web-служба ведет себя не так, как должно, например, допуская утечку конфиденциальных данных или взламывая сервер, это создает проблему. Тем не менее, подобные проблемы присущи всем серверным приложениям, будь то традиционные Web-страницы, серверные бизнес-объекты или Web-службы.

Если проблемы безопасности, порождаемые Web-службами, продолжают беспокоить системного администратора брандмауэра, он может воспользоваться фильтром приложений, чтобы запретить выполнение запросов SOAP в сочетании с HTTP-запросом.

Базовый профиль WS-I

Спецификация SOAP появилась не сразу. Именно поэтому иногда трудно добиться взаимодействия между Web-службами различных поставщиков. Для решения этой проблемы была создана Организация по обеспечению взаимодействия Web-служб (Web Services Interoperability Organization; http: ws-i.org). Эта организация в своей спецификации WS-I Basic Profile (Базовый профиль взаимодействия Web-служб) определила требования к Web-службам. Со спецификацией WS-I Basic Profile можно ознакомиться по адресу www.ws-i.org/Profiles/BasicProfile-1.1.html.

Web-службы и каркас .NET Framework

Каркас .NET Framework позволяет легко создавать и применять Web-службы, используя три основных пространства имен, связанные с Web-службами:

□ System. Web. Services - классы этого пространства имен служат для создания Web-служб;

а System.Web. Services . Description - позволяет описывать Web-службы посредством WSDL;

□ System. Web. Services . Protocols - позволяет создавать запросы и ответы SOAP.



Создание Web-службы

Чтобы реализовать Web-службу, можно создать класс Web-службы, производный от System.Web. Services .WebService. Класс WebService предоставляет доступ к объектам Application и Session ASP.NET. Использование этого класса не является обязательным, и создавать его производный класс нужно, только если требуется простой доступ к предоставляемым им свойствам.

Свойства класса WebService описаны в табл. 21.1.

Таблица 21.1. Свойства класса WebService

Свойство класса WebService

Описание

Application Context

Server

Session

User

SoapVersion

Возвращает объект HttpApplicationState для текущего запроса

Возвращает объект HttpContext, содержащий информацию, специфичную для HTTP. Этот контекст позволяет выполнить чтение информации заголовка HTTP

Возвращает объект HttpServerutility. Этот класс содержит ряд вспомогательных методов для выполнения кодирования и декодирования URL-адреса

Возвращает объект HttpSessionState для хранения определенного состояния клиента

Возвращает объект пользователя, реализующий интерфейс iPnncipai. С помощью этого интерфейса можно получить имя пользователя и тип аутентификации

Возвращает версию SOAP, используемую данной Web-службой. Версия SOAP содержится в перечислении SoapProtocolVersion

При создании Web-служб с помощью ASP.NET они не обязательно должны наследоваться от базового класса WebServi се. Этот базовый класс требуется только при необходимости наличия простого доступа к НТТР-контексту, содержащему свойства класса WebService.

Атрибут WebService

Подкласс класса WebService должен быть помечен атрибутом WebService. Класс WebServiceAttribute имеет свойства, перечисленные в табл. 21.2.

Таблица 21.2. Свойства класса WebServiceAttribute

Свойство

Описание

Description Описание службы, которое будет использовано в документе WSDL Name Извлекает или устанавливает имя Web-службы

Namespace Извлекает или устанавливает пространство имен XML для Web-службы.

Значение, используемое по умолчанию - http: tempuri .org, которое вполне подходит для тестирования, но при публикации службы пространство имен потребуется изменить

Подробнее атрибуты освещены в главе 30.

Атрибут WebMethod

Все методы, доступные из Web-службы, должны быть помечены атрибутом WebMethod. Конечно, служба может содержать и другие методы, которые не помечены этим ат-



1 ... 223 224 225 [ 226 ] 227 228 229 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика