Реферат по предмету "Информатика, программирование"


Технологія SOAP

Лабораторнаробота
 
ТехнологіяSOAP

Мета: отримання практичних навиків обміну данимиміж прикладенням C++ Builder і базою даних інформаційної системи в комп'ютерніймережі Internet з використанням технології SOAP.
 Завдання:
Створити оригінальну (!) розподілену інформаційну систему на основітехнології SOAPна прикладі системи з наступною архітектурою клієнт-серверноївзаємодії:
·         клієнтське прикладення де-небудь з Internet споживаєWeb-сервіс;
·         Web-сервіс (через SOAP) виставляє об'єктні методи;
·         об'єктні методи звертаються до віддалених даних де завгоднона Web.

Технологія SOAP
/>
Малюнок 1
Клієнт SOAP використовує спеціальний UDDI-реєстр длялокалізації Web-сервісу. В більшості випадків, замість керування WSDL безпосередньо,прикладення SOAPбуде сконструйовано так, щоб використовувати специфічний тип порту істиль скріплення, і динамічно конфігуруватиме адресу сервісу, що викликається зметою узгодження з сервісом, знайденим за допомогою UDDI.
Клієнтське прикладення створює повідомлення SOAP, яке є XML-документом,здатним здійснювати необхідні операції запиту / відповіді.
Клієнт посилає SOAP повідомлення JSPабо ASP-сторінцінаWeb-сервері, що слухає запити SOAP.
Сервер SOAP аналізує пакет SOAP і викликаєвідповідний метод об'єкту в його області, передаваній в параметрах SOAP-документа. Передухваленням повідомлення SOAP-сервером вузли проміжної обробки можуть виконуватиспеціальні функції, як вказано в заголовках SOAP.
Запрошуваний об'єкт виконує позначену функцію іповертає дані SOAP-серверу, якийзапаковує відповідь в конверт SOAP. Потім сервер «кладе» конверт SOAP в об'єктвідповіді (наприклад, сервлет або COM-об'єкт), який і посилається назадзапитуючій машині.
Клієнт одержує об'єкт, «знімає» конверт SOAP і посилаєу відповідь документ програмі, що спочатку запитала його, завершуючи циклзапиту / відповіді.
Delphiдозволяє створювати як сервери, так іклієнти WebServices. Ми почнемо розгляд із створення сервера.
Створення сервера Web Services
Створення сервера Web Services в Delphiскладається з наступних етапів:
1.      Опис інтерфейсу сервера, тобто методів, які будуть доступнідля виклику клієнту;
2.      Реалізація методів сервера;
3.      Створення проекту Delphi і включення в ньогорезультатів перших двох кроків.
У Delphi при створенні сервера Web Servicesметоди,доступні для виклику клієнту, описуються у вигляді invokable інтерфейсів. Invokable інтерфейс — цеінтерфейс, для методів якого доступна RTTI (інформація про типи на етапі виконання).Для того, щоб із звичайного інтерфейсу зробити invokable досить вказатидирективу компіляції {$M+}. Після цього всі нащадки і сам інтерфейс міститимуть RTTI. У ієрархії VCLвже є такий інтерфейс IInvokable. Таким чином, при написанні серверапростіше всього успадкувати інтерфейс IInvokable. Крім того, необхіднозареєструвати свій інтерфейс в invocation registry. Реєстрація дозволяє серверувизначити клас, що реалізовує методи інтерфейсу, а клієнту одержати описметодів, підтримуваних сервером. Реєстрація здійснюється викликом методу InvRegistry.RegisterInterface у секції initialization модуля.
Оскільки інтерфейс використовується не тількисервером, але і клієнтом, то бажано визначити його в окремому модулі Delphi.
Для прикладу ми розробимо сервер, який здійснюватимеперерахунок грошей з € у гривні і назад. У RAD Delphi оберімо пункт меню File | New | Unit. Уодержаному порожньому модулі визначимо інтерфейс сервера:
unit u_Intrf;
interface
type
IEncodeDecode =interface(IInvokable)
['{9298D805-A2FB-4860-994E-11CC5BD36025}']
// КонвертаціяЕвро в Гривни
functionEuroToUk(Value: Currency): Currency; stdcall;
// КонвертаціяГривнею в Евро
functionUkToEuro(Value: Currency): Currency;
stdcall;
end;
implementation
uses InvokeRegistry;
initialization
InvRegistry.RegisterInterface(TypeInfo(IEncodeDecode));
end.
Зверніть увагу, що рядок ['{9298D805-A2FB-4860-994E-11CC5BD36025}'] – це GUIDінтерфейсу. Для коректної роботи прикладу необхідно згенерувати його, а невводити уручну або копіювати з наведеного тексту. Генерація GUID в RAD Delphiвикликається натисненням Ctrl+Shift+G.
У разі використання у функціях інтерфейсу скалярнихтипів даних генерація SOAP-повідомлень відбувається автоматично бездодаткових зусиль з боку програміста. Якщо потрібно використовувати складнітипи даних, такі як статичні масиви, набори і класи, то необхідно створити ізареєструвати клас-спадкоємець від TRemotableXS і перевизначити методи XSToNative і NativeToXS. Даніметоди конвертують строкове і бінарне представлення даних одне в одне.
Найбільш простим способом реалізації інтерфейсу насервері є створення і реєстрація в invocation реєстрі класу-спадкоємця від TInvokableClass. Клас TInvokableClass має двічудові особливості:
·         Invocationреєстр знає про те, як створити екземпляр цього класу і йогоспадкоємців при запиті клієнтом викликів методів інтерфейсу;
·         Оскільки клас TInvokableClassє спадкоємцемвід TInterfacedObject, то вінуміє звільнити пам'ять у разі, коли кількість посилань на нього дорівнює 0, що полегшуєпрограмісту життя.
Текст модуля реалізації представлено далі:
unit u_Impl;
interface
usesInvokeRegistry, u_Intrf;
type
TEncodeDecode =class(TInvokableClass, IEncodeDecode)
protected
functionEuroToUk(Value: Currency): Currency; stdcall;
functionUkToEuro(Value: Currency): Currency; stdcall;
end;
implementation
{ TEncodeDecode }
functionTEncodeDecode.UkToEuro(Value: Currency): Currency;
begin
Result := Value /6.2;
end;
functionTEncodeDecode.EuroToUk(Value: Currency): Currency;
begin
Result := Value *6.2;
end;
initialization
InvRegistry.RegisterInvokableClass(TEncodeDecode);
end.
У випадку, якщо Ви не хочете успадковувати клас від TInvokableClass,необхідно створити і зареєструвати метод-фабрику класу, який зможе створюватиекземпляри класу. Метод повинен бути типу TCreateInstanceProc = procedure(outobj: TObject). При цьому екземпляр повинен уміти ліквідовувати себе,якщо кількість посилань використовуючих його клієнтів стане нульовою. Приреєстрації такого класу методу InvRegistry.RegisterInvokableClass другим параметромнеобхідно передати ім'я методу-фабрики класу.
Залишився останній крок — створення проектуприкладення. У RAD оберімо команду меню File | New | Other і із закладки WebServices оберімозначок SOAPServer Application. Буде виведений діалог вибору формату прикладення Web Services (мал. 2).
/> 
Малюнок 2

Оберімоформат CGIStand-alone executable. При цьому буде створений проект зWeb-модулем, що містить три компоненти: HTTPSoapDispatcher, HTTPSoapPascalInvoker, WSDLHTMLPublish (мал. 3).
/> 
Малюнок 3
·         HTTPSoapDispatcherодержуєі обробляє SOAP-повідомлення,перенаправляючи їх invoke інтерфейсам, зареєстрованим у прикладенні. Таким чином HTTPSoapDispatcher є диспетчером, відповідальнимза прийом, розподіл і відправку SOAP-повідомлень. Інтерпретація запитів і викликметодів інтерфейсів здійснюється іншим компонентом, вказаним у властивості Dispatcher(HTTPSoapPascalInvoker1).
·         HTTPSoapDispatcherавтоматично реєструє себе в Web-модулі, як автодиспетчуємий. При цьомувсі запити передаються HTTPSoapDispatcher, що позбавляє Вас від необхідностістворювати оброблювачі запитів Web-модуля.
·         WSDLHTMLPublish1 генерує івидає за запитом клієнта опис інтерфейсу сервера.
Назапит про необхідність створення інтерфейсу необхідно клацнути по кнопці Yes (мал. 4.4).

/> 
Малюнок 4
Увікні діалогу, яке з’явилося, треба задати ім’я служби (мал. 5).
/> 
Малюнок 5
Далі в проект необхідно підключити файли з описом іреалізацією інтерфейсу. Для цього в RAD оберімо команду меню Project | Add to project і удіалозі, що з'явився, оберімо модулі з описом і реалізацією методів інтерфейсу(мал. 6).
/> 
Малюнок 6

Теперможна зберегти проект, побудувати його і розташувати одержаний виконуваний файлу каталозі c:\Inetpub\ScriptsWeb-сервера IIS. Сервер готовий до роботи.
Створення клієнта Web Services
Умовно розробку клієнта можна розділити на двічастини:
·         Отримання опису інтерфейсу сервера;
·         Написання коду виклику методів сервера.
У разі розробки сервера на Delphi існує модульз описом інтерфейсу сервера на мові Object Pascal, т.ч перший етап можебути пропущений. У випадку якщо сервер був розроблений із використанням іншихмов або модуль з описом інтерфейсу недоступний, необхідно одержати описінтерфейсу у форматі WSDLабо XML. Перший варіант –це попросити файл з описом у розроблювача, другий — згенерувати опис самому.Для цього досить запустити Web-браузер і в рядку адреси набрати команду: ///wsdl. У даномуприкладі сервер розташовано на локальному комп’ютері, як Web-сервер IIS,тому рядок адреси виглядає так: localhost/Scripts/SOAPServerProject.exe/wsdl. Прицьому на екран буде виведена таблиця з описом інтерфейсів сервера (мал. 7).
/>
Малюнок 7

Необхіднообрати в таблиці інтерфейс IEncodeDecode, що цікавить нас,при цьому буде згенеровано опис інтерфейсу у форматі XML:



















































Збережіть його у файлі IEncodeDecode.xml. Отже,тим або іншим способом файл з описом у форматі XML опинився у нас вруках, тепер необхідно експортувати його в Delphi. При експорті Delphiзгенерує модуль з описом інтерфейсу на мові Object Pascal. Оберімокоманду меню File| New | Other, перейдемо на закладку WebServices і оберімо ікону WSDL Importer. Прицьому на екрані з'явиться діалог імпорту опису (мал. 4.8).
Використовуючи кнопку … діалогу, вкажемоодержаний раніше файл SOAPClient.xml, і натиснемо кнопку Finish. Модуль Delphiз описом інтерфейсу готовий.

/>
Малюнок 8
//************************************************************************ //
// The typesdeclared in this file were generated from data read from the
// WSDL Filedescribed below:
// WSDL:D:\SOAP\SOAPClient\IEncodeDecode.xml
// Encoding:utf-8
// Version: 1.0
// (05.02.200610:06:04 — 1.33.2.5)
//************************************************************************ //
unitIEncodeDecode1;
interface
usesInvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
type
//************************************************************************ //
// The followingtypes, referred to in the WSDL document are not being represented
// in this file.They are either aliases[@] of other types represented or were referred
// to butnever[!] declared in the document. The types from the latter category
// typically mapto predefined/known XML or Borland types; however, they could also
// indicateincorrect WSDL documents that failed to declare or import a schema type.
//************************************************************************ //
// !:double — «www.w3.org/2001/XMLSchema»
//************************************************************************ //
// Namespace:urn:u_Intrf-IEncodeDecode
// soapAction:urn:u_Intrf-IEncodeDecode#%operationName%
// transport:schemas.xmlsoap.org/soap/http
// style: rpc
// binding:IEncodeDecodebinding
// service:IEncodeDecodeservice
// port:IEncodeDecodePort
// URL:localhost/Scripts/SOAPServerProject.exe/soap/IEncodeDecode
//************************************************************************ //
IEncodeDecode =interface(IInvokable)
['{2F701C83-3E4D-2403-7EA6-5BC2C987131C}']
function EuroToUk(constValue: Double): Double; stdcall;
function UkToEuro(constValue: Double): Double; stdcall;
end;
functionGetIEncodeDecode(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO:THTTPRIO = nil): IEncodeDecode;
implementation
functionGetIEncodeDecode(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO):IEncodeDecode;
const
defWSDL ='D:\SOAP\SOAPClient\IEncodeDecode.xml';
defURL ='http://localhost/Scripts/SOAPServerProject.exe/soap/IEncodeDecode';
defSvc ='IEncodeDecodeservice';
defPrt ='IEncodeDecodePort';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '')then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nilthen
RIO :=THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO asIEncodeDecode);
if UseWSDL then
begin
RIO.WSDLLocation:= Addr;
RIO.Service :=defSvc;
RIO.Port :=defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil)and (HTTPRIO = nil) then
RIO.Free;
end;
end;
initialization
InvRegistry.RegisterInterface(TypeInfo(IEncodeDecode),'urn:u_Intrf-IEncodeDecode', 'utf-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IEncodeDecode),'urn:u_Intrf-IEncodeDecode#%operationName%');
end.
Переходимодо другого етапу — безпосередньому створенню клієнта. Створимо заготівку новогододатку командою File| New |Application. На головній формі розташуймо рядок введення, дві кнопки ікомпонент HTTPRIO іззакладки WebServices (мал. 9).

/> 
Малюнок 4.9
КомпонентHTTPRIO призначенийдля виклику серверів через SOAP. Вкажемо у властивості URL значення localhost/Scripts/SOAPServerProject.exe/soap/IEncodeDecode, — шляхдо сервера. Далі включимо в проект модуль Delphi з описом інтерфейсусервера і вкажемо його в секції uses головної форми проекту.
Тепер можна переходити до написання коду викликуметодів сервера. Оброблювачі подій натиснення на кнопки UkToEuro і EuroToUk виглядатимутьтак:
procedureTForm1.UkToEuroClick(Sender: TObject);
var
X:IEncodeDecode;
R:Currency;
begin
X := HTTPRIO1 asIEncodeDecode;
R :=X.UkToEuro(StrToCurr(Summa.Text));
ShowMessage(CurrToStr(R)+'€');
end;
procedureTForm1.EuroToUkClick(Sender: TObject);
var
X:IEncodeDecode;
R:Currency;
begin
X := HTTPRIO1 asIEncodeDecode;
R :=X.EuroToUk(StrToCurr(Summa.Text));
ShowMessage(CurrToStr(R)+'Грн');
end;
Залишилося запустити проект на виконання іпереконатися в його працездатності (мал. 10).
/> 
Малюнок 10


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Жизнь в бесчувственном обществе
Реферат Множественность преступлений 2
Реферат «живое» мертвое море
Реферат Провинциальные города России: Коломна
Реферат Extensive Symbolism And Character Analysis Of The
Реферат Системний підхід до складання логічної структури теми
Реферат Структура та діяльність міжнародних фінансових організацій
Реферат Производственная мощность предприятия и факторы, ее определяющие
Реферат Система показателей эффективности результативности деятельности таможенных органов
Реферат Заболевания височно-нижнечелюстного сустава
Реферат Нормативный метод учета (стандарт директ костинг) Полиграфист г. Ханты-Мансийск
Реферат Природа сущность и развитие контрактных и субподрядных отношений в сравнительном законодательст
Реферат Appreciation Of Art And Science In Society
Реферат Культура, ее функции, субъекты
Реферат Командно-административные методы управления на предприятии "Беларуськалий"