русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

XML и веб_службы


Дата добавления: 2015-07-09; просмотров: 468; Нарушение авторских прав


 

Веб_службы – это одна из важнейших областей использования XML, а SOAP – это популярный протокол для работы с веб_службами, который целиком осно_ ван на формате XML. В этом разделе я покажу, как с помощью объекта XMLHttpRequest и XPath_запросов выполнять SOAP_запросы к веб_службе.

 

JavaScript_код из примера 21.14 конструирует XML_документ, представляю_ щий SOAP_запрос, и использует объект XMLHttpRequest для передачи запроса веб_ службе. (Веб_служба возвращает обменный курс валют двух стран.) Затем с по_ мощью XPath_запроса из тела SOAP_ответа, полученного от сервера, извлекает_ ся результат.

 

Прежде чем перейти к рассмотрению программного кода, необходимо сделать несколько замечаний. Во_первых, описание протокола SOAP далеко выходит за


 

21.7. XML и веб*службы
   

 

рамки темы этой главы, поэтому в примере демонстрируются простые SOAP_за_ прос и SOAP_ответ без описания самого протокола и формата XML. Во_вторых, в примере не используются файлы на языке определения веб_служб (Web Servi_ ces Definition Language, WSDL) для поиска сведений о веб_службе. Адрес серве_ ра, метод и имена параметров жестко «зашиты» в программный код примера.

 

Третье замечание самое существенное. Использование веб_служб из клиентского JavaScript_кода строго ограничивается политикой общего происхождения (см. раздел 13.8.2). Напомню, что политика общего происхождения запрещает клиентскому сценарию соединяться и получать данные с сервера, не являюще_ гося источником документа с этим сценарием. Это означает, что обычно Java_ Script_сценарий, обращающийся к веб_службе, может быть полезен, только если документ, содержащий этот сценарий, хранится на том же сервере, что и сама веб_служба. Разработчики веб_служб могут использовать JavaScript для предос_ тавления упрощенного HTML_интерфейса к своим веб_службам, но политика об_ щего происхождения препятствует широкому применению клиентского Java_ Script_кода для объединения на единственной веб_странице результатов вызова различных веб_служб из разных концов Интернета.



 

Чтобы запустить пример 21.14 в IE, необходимо ослабить действие политики об_ щего происхождения. Для этого выберите команду Сервис→ Свойства обозревателя, в появившемся диалоговом окне перейдите на вкладку Безопасность, щелчком выделите значок Интернет и щелкните на кнопке Другой. В следующем диалого_ вом окне прокрутите список параметров безопасности и найдите группу пере_ ключателей Доступ к источникам данных за пределами домена. Обычно в этой группе (так и должно быть) установлен переключатель Отключить. Для проверки нашего примера установите переключатель Предлагать.

 

Чтобы иметь возможность проверить пример 21.14 в Firefox, в программный код примера включен вызов специфичного для Firefox метода enablePrivilege(). Этот метод запросит у пользователя разрешение на выдачу сценарию расширен_ ных привилегий, чтобы преодолеть ограничения политики общего происхожде_ ния. Данный прием будет работать в случае запуска примера из локальной фай_ ловой системы со спецификатором file: в URL_адресе, но не будет работать, если загрузить пример с веб_сервера (если только в сценарии не будет цифровой под_ писи, описание которой далеко выходит за рамки темы этой книги).

 

Теперь, когда все необходимые замечания сделаны, можно перейти к изучению программного кода.

 

Пример 21.14. Запрос веб'службы с использованием протокола SOAP

/**

* Данная функция возвращает обменный курс валют двух стран.

* Значение обменного курса определяется путем обращения по протоколу SOAP

* к веб_службе, размещенной на сервере XMethods (http://www.xmethods.net).

* Служба предназначена исключительно для демонстрационных целей.

* Она гарантирует свою доступность или точность возвращаемых данных.

* Пожалуйста, не перегружайте сервер XMethod слишком частыми запусками этого примера.

* Подробности см. по адресу: http://www.xmethods.net/v2/demoguidelines.html

*/

function getExchangeRate(country1, country2) {

// В Firefox необходимо запросить у пользователя разрешение


 

542 Глава 21. JavaScript и XML

// на получение необходимых привилегий. Специальные привилегии нужны по той

// простой причине, что выполняется обращение к веб_серверу, не являющемуся

 

// источником документа с этим сценарием. Привилегия UniversalXPConnect

 

// позволяет отправлять запросы серверу с помощью объекта XMLHttpRequest,

 

// а привилегия UniversalBrowserRead – просматривать ответ сервера.

// В IE вместо этого пользователь должен установить переключатель

 

// "Предлагать" в группе "Доступ к источникам данных за пределами домена"

 

// диалогового окна Сервис_>Свойства обозревателя_>Безопасность_>Другой.

 

if (typeof netscape != "undefined") { netscape.security.PrivilegeManager. enablePrivilege("UniversalXPConnect UniversalBrowserRead");

}

 

// Создать функцию XMLHttpRequest для запуска SOAP_запроса.

 

// Данная вспомогательная функция определена в последней главе. var request = HTTP.newRequest();

 

// Запрос будет послан методом POST в синхронном режиме request.open("POST", "http://services.xmethods.net/soap", false);

 

// Установить некоторые заголовки: тело запроса POST содержит XML request.setRequestHeader("Content_Type", "text/xml");

 

// Этот заголовок является обязательным для протокола SOAP request.setRequestHeader("SOAPAction", '""');

 

// Отправить сформированный SOAP_запрос серверу request.send(

 

'<?xml version="1.0" encoding="UTF_8"?>' + '<soap:Envelope' +

 

' xmlns:ex="urn:xmethods_CurrencyExchange"' +

 

' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' +

 

' xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"' +

 

' xmlns:xs="http://www.w3.org/2001/XMLSchema"' +

 

' xmlns:xsi="http://www.w3.org/2001/XMLSchema_instance">' +

' <soap:Body ' +

 

' soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'+

 

' <ex:getRate>' +

 

' <country1 xsi:type="xs:string">' + country1 + '</country1>' +

 

' <country2 xsi:type="xs:string">' + country2 + '</country2>' +

' </ex:getRate>' +

 

' </soap:Body>' +

'</soap:Envelope>'

);

 

// Если был получен HTTP_код ошибки, возбудить исключение if (request.status != 200) throw request.statusText;

 

// Этот XPath_запрос извлекает элемент <getRateResponse> из документа var query = "/s:Envelope/s:Body/ex:getRateResponse";

 

// Этот объект определяет пространства имен, используемые в запросе var namespaceMapping = {

 

s: "http://schemas.xmlsoap.org/soap/envelope/", // пространство имен SOAP

ex: "urn:xmethods_CurrencyExchange" // пространство имен, определяемое службой

};


 

21.8. E4X: EcmaScript для XML
   

 

// Извлечь элемент <getRateResponse> из документа ответа var responseNode=XML.getNode(request.responseXML, query,

namespaceMapping);

// Фактический результат находится в текстовом узле внутри узла <Result>

// внутри <getRateReponse>

return responseNode.firstChild.firstChild.nodeValue;

}

 



<== предыдущая лекция | следующая лекция ==>
Разворачивание HTML_шаблонов с использованием XML_данных | E4X: EcmaScript для XML


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.522 сек.