|
|
|||||||||||||||||||||||||||||
|
Использование веб-сервисов в Internet ExplorerИсточник: Gotdotnet
ВведениеВ статье рассматривается пример реализации интерфейса к веб-сервису через Internet Explorer (далее IE). Что есть интересного в рассматриваемом решении:
Работа с веб-серивсом напрямую через IE вещь экзотическая, но может таки понадобиться в ситуациях, когда требуется:
Экономия трафика происходит за счет обмена только данными между IE и сервисом. Так как данные приходят в известном формате (XML), то их легко разобрать и вставить в нужные места HTML страницы. Процесс обмена данными с веб-сервисом значительно упрощается, за счет использования Webservice Behavior (http://msdn.microsoft.com/workshop/author/webservice/overview.asp) - DHTML компонента разработанного в Microsoft специально для этих целей. Введение в DHTML компоненты.DHTML компонент - это программа определяющая поведение (реакцию на разные события, например: "onclick", "onmouseover"…) объекта на HTML странице к которому этот компонент подсоединен. Компонент представляет собой файл с расширением HTC, программа в нем может храниться, например, на JavaScript. Так же сам DHTML компонент может вставлять объекты на страницу и определять поведение этих объектов. Например, компонент "Coolbar" (http://msdn.microsoft.com/downloads/samples/internet/behaviors/library/coolbutton/coolbar_js.htm) из коллекции компонентов для IE (http://ie.components.microsoft.com/behaviors/), создает на странице панельку кнопок и реагирует на нажатия на эти кнопки. Другой компонент Rowover (http://msdn.microsoft.com/downloads/samples/internet/behaviors/library/rowover/rowover_js.htm) привязывается к существующей таблице и реагирует на события курсора на этой таблице. Упрощенно: DHTML компонент - это сохраненный в файле скрипт, который привязывается к определенным событиям на HTML странице и/или создает HTML элементы, на события которых он тоже может реагировать. Использовать DHTML компоненты стоит когда:
Ниже приведен пример DHTML компонента "Updater". Этот компонент периодически обращается к веб-сервису, получает от него данные и передает их обработчикам на HTML странице, которые подписаны на событие "onupdate" этого компонента.
Листинг 1.Присоединение к событию различных обработчиков выглядит так:
Подключение HTML компонента к странице Необходимый СSS:
Необходимый HTML.
Еще один пример HTML компонента есть в форуме www.gotdotnet.ru - это форма ввода сообщения. Внутри себя компонент Webservice Behavior использует для взаимодействия с веб-сервисами ActiveX объект "Microsoft.XMLHTTP". Webservice Behavior поддерживает состояние сессии. ЗадачаТребуется разработать интерфейс для ввода и отображения заявок на покупку акций через Интернет. Информацию о заявках можно получить от веб-сервиса, заявки посылаются и модифицируются через тот же веб-сервис. Функции интерфейса:
ОграниченияУ клиентов использующих интерфейс установлен браузер Internet Explorer не ниже версии 5.0. РешениеВеб-сервисНа рисунке 1 приведена диаграмма классов описывающая структуру веб-сервиса используемого для взаимодействия с биржей. Синим цветом выделены классы, объекты которых будут передаваться между IE интерфейсом и веб-сервсом.
Рисунок 1 Обмен данными с веб-сервисомОбмен данными с веб-сервисом происходит, по схеме указанной на рисунке 2. С помощью Web Service Behavior мы запрашиваем у веб-сервиса данные, полученный XML вставляем в XML островок (DataSource). При обновлении этого островка автоматически обновляется привязанный к нему потребитель данных (таблица или поле ввода). При отправке данных берем значения соответствующих контролов на странице и отправляем их в веб-сервис.
Рисунок 2 Инициализация веб-сервиса у клиентаРегистрируем Web Service Behavior на HTML странице. Для этого создаем CSS класс
который реализует поведение Web Service Behavior. После чего добавляем элемент DIV этого класса на страницу. Именно этот элемент и будет предоставлять возможности общаться в веб-сервисом.
Перед обращением к методам веб-сервиса необходимо проинициализировать его в Web Service Behavior вызвав метод:
путь_к_сервису . Пример: "services/OrdersEntryService.asmx?WSDL" имя_сервиса. Пример: "Exch" , здесь может быть любое слово. Сделано для возможности использовать несколько веб-сервисов на странице. Пример использования веб-сервиса после его инициализации.
В момент инициализации Web Service Behavior получает от веб-сервиса его описание и на основе этого описания происходит последующее взаимодействие с сервисом. Примечание : В описании к Web Service Behavior говорится, что в качестве веб-сервиса может выступать только сервис, доменная часть URL которого совпадает с доменной частью URL текущей страницы. Проще говоря, если адрес сервиса http://mydomen/OrdersEntryService.asmx?WSDL а адрес странички использующей сервис http://yourdomen/page.aspx, то они не будут между собой взаимодействовать. О том, как это обойти можно прочитать тут: http://msdn.microsoft.com/workshop/author/webservice/using.asp#Security_Issues Отправить заявкуДля того, чтобы передать объект из IE интерфейса в веб-сервис необходимо:
передать объект с помощью HTML компонента Webservice Behavior.
функция - ссылка на функцию, которая будет вызвана компонентом Web Service Behavior в момент возвращения данных веб сервисом (callback функция). Пример - onWSSaveOrder. название_веб_метода. Пример - "AddOrder". параметры_веб_ метода. Параметры веб - метода через запятую. Пример callback функции.
Примечание: Исходная версия этого компонента от Microsoft не позволяет отправлять сервису в качестве параметров объекты. Толи это баг, толи фитча, но после изменения кода компонента в строках 675-677 мы сможем использовать объекты в качестве параметров сервиса. Исправленная версия компонента прилагается к статье. Отобразить список заявок.Список заявок отображается в таблице, которая привязывается к островку данных на странице.
При обновлении данных в XML островке обновляются данные и в таблице. Список заявок запрашивается методом:
Данные возвращаются в функцию onWSGetBlotter:
Обновить список заявокОбновление списка заявок делается периодическими запросами данных от веб-сервиса, и обновлением на основе них XML островка. В развитие приведенной схемы обновлений желательно делать запрос не всех данных, а только обновлений. Это потребует реализации некоторой функциональности по сбору и накоплению обновлений для каждого пользователя на серверной стороне веб-сервиса. Более легкой оптимизацией процесса обновлений может стать введение для каждой строки таблицы скрытого поля, в котором будет содержаться хэш-код данных этой строки. При каждом обновлении сравнивать хэш-код строки пришедшей с сервера и хэш-код текущей строки и в случае различия обновлять строку. Отфильтровать и отсортировать список заявокФильтрация выполняется с помощью передаваемого в метод "GetOrdersBlotter" массива структур типа FilterParameter. Опять же, здесь приходится очень полезной возможность передавать объекты и массивы объектов в веб сервис.
Для сортировки списка в веб сервис передаются имя колонки и направление сортировки. Отредактировать заявку
При клике на заявке в списке, она открывается в форме для редактирования. Здесь нам помогает использование еще одного DHTML компонента "Rowover Behavior". Этот компонент позволяет привязывать свои обработчики к событию click на строке таблицы, раскрашивать в разные цвета строки таблицы, отображать курсор на строках таблицы. Привязывается этот компонент к таблице по аналогии с компонентом Webservice Behavior.
Элементы формы редактирования заявки связаны с XML островком данных.
При изменении данных в островке обновляется и содержание формы. Заключение
В статье описаны возможности использования DHTML компонентов для связи с веб-сервисами и функции привязки данных в Internet Explorer. Это еще один способ, как сделать веб интерфейс максимально похожим на интерфейс десктопный, как снизить трафик и нагрузку на сервер. Работающий пример доступен по адресу: http://shelomanov.russia.webmatrixhosting.net/timetracker_cs_vs_1/ .
Исходные коды в формате проекта VS.NET 2003: http://www.gotdotnet.com/Community/UserSamples/Download.aspx?SampleGuid=A4E19629-742E-4A73-BC53-0081D4E470FE . Все DHTML компоненты, использованные в примере, доработаны автором, об этом упомянуто в тексте статьи. Ссылки по теме
|
|