|
Программирование >> Программирование с использованием ajax
Сообщение 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. Конечно, служба может содержать и другие методы, которые не помечены этим ат-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |