
- •1. Основы организации Интернет (Интранет) как среды для работы распределенных программных приложений.
- •2. Понятие сервис-ориентированной архитектуры (соа) информационной инфраструктуры предприятий. Главные преимущества соа для бизнеса.
- •3. Составные части соа – персонал, бизнес-процессы, информация, связь, повторное использование.
- •4. Основные сценарии внедрения соа: создание сервиса, связь на основе сервисов, сервисы взаимодействия и совместной работы.
- •5. Основные сценарии внедрения соа: управление бизнес-процессами, информация как сервис. Вспомогательные сценарии: архитектура, управление, обеспечение безопасности и администрирование соа.
- •7. Стандарты веб-сервисов. Soap (Simple Object Access Protocol).
- •3 Стандарта на кот-ых они базируются:
- •7. Стандарты веб-сервисов. Wsdl (Web Services Description Language).
- •3 Стандарта на кот-ых они базируются:
- •9. Проектирование веб-сервисов. Стили взаимодействия с веб-сервисами (rpc, Document).
- •11. Создание Web-сервиса в среде Delphi
- •12. Создание приложений-клиентов средствами Delphi. Структура проекта. Основные компоненты приложения.
- •Создание rpc-сервиса и приложения-клиента с использованием языка программирования php. Использование php для разбора xml-документов.
- •14. Основы .Net, идеология, вычислительная модель, технологическая платформа, инструментальное средство
- •15. Архитектурная схема .Net
- •15. Архитектурная схема .Net, роль веб-сервисов
- •Разработка веб-сервисов и веб-клиентов в Microsoft Visual Studio .Net Создание Web-сервисов
- •Создание клиентского приложения
11. Создание Web-сервиса в среде Delphi
Создадим веб-сервис, который умножает два числа. Для тестирования веб-сервиса следует иметь веб-сервер с доступным каталогом для размещения исполняемых фалов (например, Denwer).
В делфи выбираем: File / New / Other / SOAP Server Application
Тип веб-приложения выбираем в виде исполняемого файла (CGI Stand-alone executable).
Получаем объект TWebModule, содержащий три компонента:
1. THTTPSoapDispatcher - получение запросов с помощью протокола SOAP;
2. THTTPSoapPascalInvoker - превращение этих запросов в вызовы методов объектов приложения;
3. TWSDLHTMLPublish - генерация WSDL-файлов, содержащих описание реализованных в Web-сервисе интерфейсов, предназначенное для разработчиков клиентских приложений для данного Web-сервиса.
Для создания описания интерфейса веб-сервиса создадим новый модуль и в нем опишем интерфейс IMult, содержащий единственный метод multiply.
Создаем модуль с реализацией метода Multiply (умножение двух чисел).
Сохранив и скомпилировав проект, скопируем полученное приложение в каталог Web-сервера, предназначенный для хранения исполняемых файлов (z://home/localhost/cgi-bin).
Если теперь обратиться из браузера к веб-сервису с параметром /wsdl, получим список реализуемых им интерфейсов. Один из них, IMult, создан нами, другой, IWSDLPublish, реализован в компоненте TWSDLHTMLPublish.
Щелкнув по ссылке, указывающей на интерфейс IMult, можно получить WSDL-описание нашего интерфейса IMult. Cохраним его в файле с расширением .wsdl или .xml в папке localhost/www/my_service. Теперь чтобы обратиться к этому файлу в браузере пишем localhost/my_service/<имя>.wsdl
12. Создание приложений-клиентов средствами Delphi. Структура проекта. Основные компоненты приложения.
Создать новый проект в среде Delphi; добавляем объект WSDL Importer из категории WebServices; в открывшемся окне в поле Location of WSDL File or URL вставить адрес сервиса и нажать Finish. На форме размещаем кнопку, два поля ввода и компонент THTTPRIO, который нужен для связи с конкретным сервисом. В его свойстве WSDLLocation укажем данную строку:
http://MyWebServices.ru/cgi-bin/Proj ectl.ехе/wsdl
/IMulValues
В полях Port и Service выбрать значения из выпадающего списка. В раскрывающемся списке Service выберем единственное значение IMulValuesService, в свойстве Port выберем пункт IMulValuesPort. Записываем обработчик нажатия на кнопку.
procedure TForml.ButtonlClick(Sender: TObject);
var
MulValues: IMulValues;
begin
MulValues := HTTPRIOl as IMulValues;
ShowMessage( IntToStr(
MulValues.MulValues(StrToInt(Editl.Text), StrToInt (Edit2 .Text) ) ) )';
end;
К этому модулю надо добавить ссылку на модуль InvMul с описанием интерфейса IMulValues. При нажатии на кнопку произойдет обращение к нашему SOAP-серверу и в окне-сообщении выведется результат умножения двух чисел.
Создание rpc-сервиса и приложения-клиента с использованием языка программирования php. Использование php для разбора xml-документов.
Для создания приложений-клиентов и приложений-сервисов на языке PHP используется специальная библиотека скриптов. Основой обоих приложений является файл xmlrpc.php.
Для серверной части описание функций содержится в файле api.php
Клиентская часть содержит код для вызова удаленных функций сервиса (RPC).
Клиентский код запроса имеет следующий вид:
//формируем запрос, по какому адресу, вызываем функцию с данными параметрами
list ($s, $response) = XMLRPC_request
($site,
$location,
'getSum',
array(XMLRPC_prepare($query_info), '')
);
В переменную $responce записывается ответ.
Переменная $location содержит путь к серверной части.
getSum - имя функции.
array(XMLRPC_prepare($query_info),'') - массив $query_info содержит значения входных параметров
Для сервера:
Краткое описание того, что происходит в server.php:
1. Подключаемся к MySQL и предоставляем скрипту доступ к БД.
2. Подключаем kd_xmlrpc.php: теперь мы можем использовать функции Кейта.
3. Подключаем web_service_api.php, где определяются XML-RPC-методы.
4. Для того чтобы забрать содержимое $GLOBALS['HTTP_RAW_POST_DATA'], где хранится запрос от XML-RPC-клиента, и переконвертировать параметры XML в PHP-переменные используем функцию XMLRPC_parse().
5. Определим, какой метод вызывается функцией XMLRPC_getMethodName(). Мы хотим, чтобы наш XML-RPC-сервер мог выполнять больше чем одну задачу (здесь задача=метод=функция) и как раз здесь-то мы и определяем, какой из методов будет обрабатывать текущий запрос (например, "news.getNewsList" или "news.viewNewsItem").
6. Проверим, какие параметры передавал клиент в своём запросе (например, id новости).
7. Проверяем, существует ли метод (а это описано в web_service_api.php), и если всё в порядке, то этот метод (он же PHP-функция) и выполняется. Если метод не найден, передаём управление в метод по умолчанию "method_not_found".
Специфические XML-RPC-функции, задействованные в этом скрипте:
1. XMLRPC_parse(): эта функция получает XML-данные и преобразует их в переменные PHP - то есть XML из запроса преобразован в удобоваримую для PHP форму. На данном этапе нет ничего, взятого непосредственно из спецификации стандарта XML-RPC: любые полученные XML-данные преобразуются в переменные PHP.
2. XMLRPC_getMethodName(): определяет, какой метод нужно задействовать, то есть мы узнаём, какую PHP-функцию вызывать.
3. XMLRPC_getParams(): получает XML-RPC-параметры и преобразует их в переменные PHP.
Краткое описание того, что происходит в web_service_api.php:
1. Сначала мы создали PHP-массив $xmlrpc_methods, где хранится список всех доступных XML-RPC-методов и соответствующих им функций PHP.
2. Функция mysql_datetime_to_timestamp() по сути не является XML-RPC-методом; эта функция нужна для конвертирования MySQL-поля "дата-время" в формат, с которым сможет работать PHP.
3. Затем определяем функцию news_getNewsList() для отправки запросов к таблице "kd_xmlrpc_news". Функция может принимать в качестве аргумента массив $query_info, с параметрами, которые может послать XML-RPC-клиент. Эти параметры могут повлиять на запрос к БД, изменяя опции "ORDER BY" и "LIMIT".
4. Функция news_viewNewsItem() используется для того, чтобы выдернуть из БД одну новость и принимает в аргумент только одну переменную/параметр: $news_id, содержащий id новости в БД.
5. Последняя функция XMLRPC_method_not_found() - это функция по умолчанию, которая генерит ответ в том случае, когда клиент запрашивает несуществующий XML-RPC-метод.
Специфические XML-RPC-функции, задействованные в этом скрипте:
1. XMLRPC_convert_timestamp_to_iso8601(): XML-RPC использует особенный формат обозначения даты и времени. Данная функция просто берёт timestamp в PHP и преобразует его в формат, применяемый в XML-RPC.
2. XMLRPC_prepare(): эта функция берёт набор переменных PHP и преобразует их в параметры
XML-RPC. Функция определяет тип переменных и поэтому правильно преобразует в XML-RPC. Именно эта особенность делает интерфейс проекта Кевина Девенса дружественным: в большинстве случаев другие приложения требуют при генерации ответа на XML-RPC-запрос отдельных функций для массивов, целых чисел, строк и т. д.
3. XMLRPC_response(): данная функция используется для отправки ответа клиенту. Функция принимает два аргумента: XML-RPC-данные (сгенерённые функцией XMLRPC_prepare()),. и факультативно имя XML-RPC-сервера или user agent, например, KD_XMLRPC_USERAGENT - здесь можно поставить всё что угодно.
4. XMLRPC_error(): генерирует ответ XML-RPC-сервера с применением специальных тэгов с сообщением об ошибке, которые определены в спецификации стандарта.
Для клиента:
Что происходит в скрипте "kd_xmlrpc.php"?
Здесь PHP-код - это простое ветвление if/else: то есть если мы решим просмотреть одну конкретную новость и используем переменную $_GET['news_id'], то скрипт покажет эту новость. В противном случае будет показан список всех новостей.
Для просмотра списка новостей мы используем метод news.getNewsList. Заметьте, что $query_info['limit'] выставлен на 10 (то есть нам нужно максимум 10 новостей), а $query_info['order'] - на значение "author" (то есть сортировка новостей по имени автора). Эти две переменные станут параметрами, которые отправит XML-RPC-клиент в своём запросе.
При просмотре одной новости целиком, в параметр мы преобразуем $_GET['news_id']; по этому параметру сервер сможет определить, какую новость мы желаем получить.
Специфические XML-RPC-функции, задействованные в этом скрипте:
1. XMLRPC_prepare(): раньше мы использовали её в сервере, и здесь также конвертируем переменные PHP в XML-RPC-параметры. Именно здесь мы фиксируем данные, которые понадобятся серверу для работы запрашиваемого метода.
2. XMLRPC_request(): данная функция принимает в качестве аргумента пять переменных и возвращает массив. Это, собственно, то, что делает клиента клиентом. Принимаются:
А) $site - доменное имя сервера
Б) $location - путь к скрипту сервера от web-корня
В) $methodName - имя запрашиваемого XML-RPC-метода
Г) $params - любые необходимые для работы метода переменные
Д) $user_agent - необязательный аргумент, и здесь может быть всё, что вам заблагорассудится (например, HarryFsXMLRPCClient).
Возвращаемый массив содержит две переменные. Первая принимает значение 0 в случае отрицательного ответа от сервера, 1 в случае положительного, и это есть наша обработка ошибок. Вторая переменная - это многомерный массив, в котором содержатся данные из ответа сервера.
3. XMLRPC_convert_iso8601_to_timestamp: нашей функцией convert_date() мы преобразуем дату и время из формата XML-RPC в нечто более приглядное, а timestamp от PHP используем в качестве перевалочного пункта.