Веб-сервисы, защищенные посредством промежуточного программного обеспечения, ориентированного на обработку сообщений - Пробное приложение

ОГЛАВЛЕНИЕ

Пробное приложение

Базовая демонстрационная программа показывает взаимодействие двух консольных приложений – клиента и сервера – обменивающихся сообщениями с помощью разработанного выше каркаса.

Демо показывает передачу незашифрованных и зашифрованных WSE сообщений Soap на основе различных стандартных типов данных и комбинаций DIME API. Несмотря на то, что демо простое, оно хорошо иллюстрирует различные принципы.

Рисунок 17. Демо, выполняющее двух клиентов и одну серверную службу MQ / MSMQ

Демо показывает серверную службу, обрабатывающую входящие сообщения Soap в очередях MSMQ и MQ и возвращаемые ответы. Обработка нетривиальных типов данных (вещественные сериализованные пользовательские объекты) также включена в демо. Снимок экрана показывает обработку составных типов на основе произвольного класса под именем "продукт". Он показывает сериализацию и передачу массивов «продуктов» между сервером и клиентом. На снимке экрана выше два клиента выполняют вызовы Soap на очередях и через HTTP.

Чтобы оценить возможный уровень параллельности, запустите один экземпляр серверной службы, с последующим запуском стольких клиентов, сколько вы хотите протестировать. Все экземпляры клиента должны завершить тестовые прогоны без выбрасывания каких-либо исключений. Так как идентификаторы соответствия используются для связывания запроса и ответа, клиент гарантированно получает правильный ответ на свой запрос, и не должно быть проблем с указателями, перемещающимися под запросом получения сообщения.

Знакомство с приложением

Следующая диаграмма знакомит с отдельными частями пробного приложения и показывает их компоновку в модели клиент-сервер:

Рисунок 18. Результаты статьи

Существует два веб-сервиса ASP.NET (один с поддержкой WSE), поддерживающих базовый API, состоящий из:
•    вариантов HelloWorld, возвращающих строки и массивы строк
•    операций с двоичными данными – отправка и прием изображений
•    сериализации составных типов данных – ProductService, обслуживающий экземпляры продукта
•    [для версии сервиса с WSE] Отправка изображений с использованием поддержки DIME в WSE

Виртуальные каталоги IIS для этих сервисов называются WSAltRoute и WSAltRouteWSE.

Холостой сервис (WSAltRouteBEFake.exe) существует в области сервера – он функционально работает, подобно вышеупомянутым веб-сервисам ASP.NET, но реагирует на сообщения, принимаемые в очередях, а не через HTTP.
Код каркаса, реализующий подключаемые протоколы с формированием очередей, хранится в единственной сборке (WSQTransports.dll), чтобы его можно было использовать во множестве проектов.

Каркас управляется с помощью пробного консольного приложения (WSAltRouteTest.exe), тестирующего разные виды API через разные протоколы передачи.

Поддержка асинхронной работы (не показана) обеспечивается сборкой под именем AsyncHelper.dll.

Очереди MSMQ и MQ конфигурируются с помощью инструмента под названием WSQSetup.exe (не показан).

Установка приложения

zip архив содержит несколько проектов, описанных в разделе ниже. Основные действия при развертывании следующие:
•    Убедитесь, что требуемые ресурсы (особенно MQ и WSE) установлены
•    Разархивируйте файл, сохранив структуру папок
•    Найдите папку \Bin
•    Запустите исполняемый файл WSQSetup.exe для создания соответствующих очередей. Следуйте подсказкам на экране.
•    Найдите подпапку \Client
•    Отредактируйте файл WSAltRouteTest.exe.config, проверьте и внесите любые изменения.

Список элементов следующий:

Элемент

Описание

NoTrace

Если “Истина”, не делает дамп трассировки стека при возникновении исключения

EnableHTTPCalls

Если “Истина”, делает вызовы API через протокол передачи HTTP

EnableMSMQCalls

Если “Истина”, делает вызовы API через протокол передачи MSMQ

EnableMQCalls

Если “Истина”, делает вызовы API через протокол передачи MQ

HTTPUriNonWSE

Конечная точка веб-сервиса WSAltRoute

HTTPUriWSE

Конечная точка веб-сервисаWSAltRouteWSE

MSMQRequestQ

Конечная точка очереди запросов MSMQ

MSMQResponseQ

Конечная точка очереди ответов MSMQ

MQRequestQ

Конечная точка очереди запросов MQ

MQResponseQ

Конечная точка очереди ответов MQ

LocationOfImages

Путь для чтения и записи изображений

•    Например, если вы не хотите работать через HTTP, установите значение EnableHTTPCalls в “Ложь”.
•    Переместите папку \Bin
•    Найдите подпапку \Server
•    Отредактируйте файл WSAltRouteBEFake.exe.config, проверьте и внесите любые изменения.

Список элементов следующий:

Элемент

Описание

NoTrace

Если “Истина”, не делает дамп трассировки стека при возникновении исключения

QueueToMonitor1

Имя 1-й очереди для отслеживания на сообщения Soap

QueueToMonitor2

Имя 2-й очереди для отслеживания на сообщения Soap

QueueToMonitorX

Имя X-й для отслеживания на сообщения Soap

PollDelayTime

Задержка приема в мс.

LocationOfImages

Путь для чтения и записи изображений

•    Например, если вы хотите добавить очередь для отслеживания, добавьте QueueToMonitor3 и установите соответствующее значение в имени Uri очереди.
•    Если хотите протестировать протокол передачи HTTP:

o    найдите папку \WebServices
o    скопируйте две подпапки (WSAltRoute и WSAltRouteWSE) в вашу главную папку веб-сайта (обычно c:\inetpub\wwwroot).
o    Для первой папки создайте новый виртуальный каталог IIS под именем WSAltRoute для стандартного веб-сайта (порт 80), указывающий на целевую папку WSAltRoute.
o    Для второй папки создайте новый виртуальный каталог IIS под именем WSAltRouteWSE для стандартного веб-сайта (порт 80), указывающий на целевую папку WSAltRouteWSE.

•    Если хотите протестировать протокол передачи MSMQ:

o    Убедитесь, что очереди запросов и ответов MSMQ, определенные в WSAltRouteTest.exe.config клиентского приложения, существуют. Используйте средство управления компьютером Windows 2000 или Windows XP для проверки этого.

•    Если хотите протестировать протокол передачи MQ:

o    Убедитесь, что очереди запросов и ответов MQ, определенные в WSAltRouteTest.exe.config клиентского приложения, существуют. Используйте инструмент ‘Проводник’ Websphere MQ для проверки этого.

•    Переместите папку \Bin
•    Найдите подпапку \Images
•    Скопируйте два файла .gif, CD.gif и Help.gif в папку, заданную в WSAltRouteTest.exe.config клиента и WSAltRouteBEFake.exe.config сервера под ключевым именем LocationOfImages.
•    Чтобы запустить демо, сначала запустите серверный процесс WSAltRouteBEFake.exe, следя за правильным появлением пускового сообщения. Затем запустите клиентский процесс WSAltRouteTest.exe. После этого активность должна отобразиться в обеих консолях в течение следующих нескольких секунд, по мере того как различные API веб-сервиса выполняются через выбранные протоколы передачи. Не должно появляться никаких исключений.
•    Если исключения появляются, могут показываться сообщения, содержащиеся в исключении. Если это имеет место, можно включить трассировку стека путем изменения значения NoTrace в соответствующем конфигурационном файле приложения (обычно клиентского) на “Ложь”.

Компоновка приложения

Решение состоит из следующих проектов:

Имя проекта

Назначение

WSAltRouteTest

Программа клиента, тестирующая новые протоколы передачи.

WSAltRouteBEFake

Холостая программа сервера, отвечающая на запросы.

WSQTransports

Код, поддерживающий подключаемый транспортный каркас и реализации протоколов с формированием очередей.

AsyncHelper

Асинхронная поддержка бизнес-объектов из статьи MSDN

WSAltRoute

Веб-сервис ASP.NET сконфигурирован без WSE

WSAltRouteWSE

Веб-сервис ASP.NET сконфигурирован для работы с WSE

WSQSetup

Программа настройки для очередей – запускайте ее после установки MSMQ (и по желанию MQ), но до запуска демо.

WSSetupMQ

Поддержка создания очередей MQ – требует среду выполнения VB6

Файл решения должен загружаться мгновенно. Вам может понадобиться заново указать местоположение файлов .webinfo для двух ориентированных на HTTP веб-сервисов (по умолчанию занимающих порт 80), но в остальном проекты должны компилироваться прямо в подпапках \Bin\Client и \Bin\Server (при условии, что файлы внутри них не заблокированы).

Обзор разбора примеров

Ниже кратко перечислены главные характеристики решения:

Базовая поддержка

•    На первый взгляд, сгенерированный посредник Soap выглядит тесно связанным с протоколом передачи HTTP. В действительности дело обстоит не так.
•    Веб-сервисы ASP.NET включают в себя инфраструктуру, специально предназначенную для обеспечения поддержки альтернативных протоколов передачи, основанных на System.Net.WebRequest и System.Net.WebResponse.
•    Для поддержки новых протоколов в составе инфраструктуры предоставляется механизм регистрации схемы. После того как новые "схемы сети" зарегистрированы, клиент может использовать их при задании конечной точки.
•    MSMQ и Websphere MQ легко упаковываются в протокол передачи, и клиент просто задает конечную точку на основе схемы. Это минимизирует изменения кода, требуемые для наделения клиента возможностью использовать новый протокол передачи.

Поддержка защиты

•    WSE легко встраивается в клиенты и серверы ASP.NET, и в более необработанной форме в произвольные серверные службы .NET. В первом случае SoapWebRequest выполняет большую часть работы, такую как управление сериализацией сообщений Soap и последующая передача их конкретному протоколу передачи для доставки.
•    В код требуется внести немного изменений (каркас и клиент), чтобы перейти от режима незашифрованного текста к режиму защиты WSE.

Поддержка двоичных вложений

•    При наличии установленного WSE поддержка двоичных вложений посредством SoapWebRequest легко обеспечивается.

Дальнейшая работа

Данный раздел создается проще простого! Набор фактов для обдумывания включает:
•    В коде есть места, где строки соединяются, а не строятся с помощью StringBuilder. Можно попробовать использовать другую технику!
•    Нужно выполнить много действий  для защиты различных аспектов решения. Сразу на ум приходят два следующих:

o    Использовать StrongNameIdentityPermissionAttribute для явного контроля за тем, кто вызывает важные сборки (только вызывающие программы, подписанные конкретным сильным именным ключом)
o    Ключи шифрования должны храниться за пределами кода, в (хорошо защищенном) файле или в защищенной области реестра

•    Демонстрационная программа была построена на базе похожего на RPC протокола сообщений, в котором предполагаются ответы на сообщения. Изучение односторонних сообщений Soap было бы интересным – они лучше соответствуют операции отправки в форме очереди без необходимости приема соответствующего ответа и были бы полезным дополнением к библиотеке.
•    Данный каркас использовался для взаимодействия с сервером на Java, использующим набор инструментов Axis Toolkit 1.1 RC1 под J2SE 1.4.1.  К сожалению, добавление Java в набор привело бы к удвоению размера копии! В зависимости от реакции на данную статью, возможно написание новой статьи, более детально рассматривающей вопрос функциональной совместимости.
•    Было бы интересно добавить средство сжатия, как в библиотеке сжатия SmartLib  , в секцию DIME для больших вложений.
•    В каркасе можно реализовать другие протоколы передачи – SMTP, FTP, SQL2000 и т.д. являются хорошими кандидатами. Например, реализация TCP/IP в данном каркасе была выполнена весьма просто.