Новий "універсальний клей" – Web Services

Проблеми повторного
використання програмного забезпечення та інтегрування різних
інформаційних систем виникли на зорі розвитку IT
індустрії. Пройшовши на шляху вирішення цих завдань від використання
бібліотек функцій до об'єктно-орієнтованого програмування та
бінарних стандартів викликів об'єктів, таких COM,
CORBA, IT індустрія
підійшла впритул до вироблення стандартів в області механізмів
взаємодії систем. На зміну питання "Чий клей для склеювання
програм краще? "приходять питання" Де взяти універсальний клей? "і
"Чи буде мій об'єкт добре триматися універсальним клеєм?". Які
механізми і протоколи можуть одержати широке поширення і будуть
прийняті в якості стандартів? Засновані на RPC
(Remote Procedure Call), бінарні
протоколи, крім того, що вони не сумісні між собою, не можуть
вирішити завдання взаємодії в розподілених Web
додатках, оскільки тільки HTTP
трафік гарантовано переносить інформацію через
Firewalls. Необхідний новий підхід.

Концепція
Web Services покликана вирішити це завдання
об'єднання, інтеграції різнорідних систем на основі відкритих
стандартів. Заснована на SOAP і
XML, ця концепція пропонує шлях
взаємодії об'єктів, реалізованих у різних бінарних стандартах,
через Internet. Web
Services є поворотом від Internet
оглядачів до Internet розподілених
додатків.

SOAP
являє собою протокол обміну XML
повідомленнями між об'єктами для передачі інформації про викликаються
методах, параметри і повертаються значеннях. SOAP
заснований на XML, формат його повідомлень не
залежить від транспортного протоколу передачі повідомлень. Реалізація
SOAP поверх HTTP
знаходиться на розгляді W3C.
Вже зараз ведуться роботи з розробки реалізацій поверх інших
транспортних протоколів передачі повідомлень, таких як
SMTP, MSMQ. Але для побудови
розподілених додатків одного формату обміну не достатньо. Потрібен
механізм опису надаються об'єктом інтерфейсів.
WSDL призначений для вирішення цього завдання.
WSDL так само подано на розгляд до
W3C консорціум. Для
перерахування Web Services, що розкриваються на
даному Web сервері, використовується найпростіший
протокол DISCO. Якщо провести аналогії з
C OM протоколом, то можна співвіднести
RPC (COM) і
SOAP як протоколи викликів об'єктів,
WSDL (COM) і
Type Library (SOAP)
як формати опису типів об'єктів, Registry (COM)
і DISCO (SOAP) як
сховище списку локально доступних об'єктів. . UDDI
вирішує задачу глобального каталогу Web
Services.

На наших очах концепція
Web Services виходить сьогодні зі стадії тільки
обговорення та стандартизації в стадію реалізації. Багато виробників
ПО заявили про плани або вже випускають інструментальні засоби для
створення Web Services.
Microsoft. NET Framework і
Visual Studio.NET,
випуск яких намічений на осінь цього року, надають розробникам
потужний інструментарій для створення XML Web Services
та побудови розподілених Web додатків.

Давайте розглянемо
процес створення досить простого розподіленого додатка,
використовує Web Service. Додаток буде
складатися з рівня даних, реалізованого в SQL
Server, рівня бізнес логіки, реалізованого як
Web Service і рівня користувальницького
інтерфейсу, який ми реалізуємо у вигляді Windows
додаток з GUI і у вигляді додатку з
тонким клієнтом в браузері. Клієнтські додатки будуть реалізовувати
перегляд та редагування даних про продукти з таблиці
Products бази даних
Northwind, що входить в постачання SQL Server
2000. C базою даних клієнтські програми
будуть спілкуватися через Web Service, за протоколом
HTTP і SOAP.

 

Рис.

Архітектура розподіленого додатка у прикладі.

Отже, оскільки шукана
БД вже є в нашому розпорядженні, почнемо c
рівня бізнес логіки, тобто з Web Service.

 

Створення Web Service

 

Ми знаємо, як, наприклад,
в Visual Basic, створити COM
об'єкт для повторного використання. (Посилання на статтю) Спробуємо
відповісти на питання, наскільки відрізняється розробка
Web Service середовищі Visual Studio.NET
від створення ActiveX DLL в
Visual Basic 6.0.

Наш Web
Service буде розкривати два методи:
GetProducts
, Для отримання інформації про продукти іUpdateProducts
, Для зміни інформації в БД.

SOAP
не обмежений передачею тільки простих типів даних і дозволяє
передавати в якості параметрів і повертаються значень структури і
масиви. Природно, як Ви могли і припустити, складні типи даних
представляються у вигляді в форматі XML в тілі
SOAP повідомлень.

Використовуємо цю
можливість при побудові нашого Web Service
і будемо повертати об'єкт типу DataSet (ADO.NET)
. Передача його через SOAP можлива в силу
того, що він має інтерфейс для представлення свого стану в
XML форматі. Не розповідаючи докладно про
ADO.NET, зазначу, що
через об'єкт типу DataSet ми можемо працювати з
наборами даних, без постійного з'єднання з джерелом даних.
Фактично DataSet представляє собою СУБД,
реалізовану в пам'яті. Сформувавши DataSet,
передамо його на сторону клієнта. Після змін набору даних
клієнтська програма може передати DataSet
назад на рівень бізнес логіки, де і відбудеться синхронізація з
реальною базою даних. Почнемо розробку:

1.     
Запустіть Visual Studio.NET

2.     
через меню File|
New| Project

відкрийте діалогове вікно вибору типу нового проекту.

3.     
Виберіть Visual C#
Projects
(Вибір мови, в кінці кінців,
може бути справою смаку) на панелі Project Types
і ASP.NET
Web Service на панелі
Templates

4.     
Назвіть проект NorthwindProductsWS і
вкажіть http://localhost
в якості Web сервера.

5.     
Після натисніть на OK
і Visual Studio створить
новий Solution
з нашим проектом.

Додамо два об'єкти до
Web Service: SqlDataAdapter, після
з'єднання з БД за допомогою SqlConnection,
виконає запит до таблиці Products і заповнить
даними об'єкт DataSet.
SqlDataAdapter буде так само змінювати БД на основі набору даних,
повернутого від користувача.

6.     
Відкрийте Server Explorer,
вибравши пункт меню View
| Server Explorer

7.     
Зробіть правий клік на Data Connections
і виберіть Add Connection
зі спадаючого меню.

8.     
У Data Link Properties
діалоговому вікні заповніть інформацію для встановлення з'єднання
з Northwind базою даних

9.     
натисніть OK
для встановлення з'єднання.

10. 
У Server Explorer розкрийте
ServerName.Northwind.dbo

і потім розкрийте вузол Tables.

11. 
Відбуксують мишею таблицюProducts
на панель дизайну. Пара SqlConnection
і SqlDataAdapter, забезпечує
з'єднання з джерелом даних, з'явиться в нижній частині
панелі дизайну

1.     
Через меню Data |
Generate DataSet
викличте
діалог, виберіть New
і назвіть dataset
ProductsDS1
.

2.     
Збережіть файли через менюFile
| Save All.

Тепер ми зробимо доступним
DataSet
для
використання з Windows або
Web додатків за протоколом
SOAP, додавши методи до нашого WebService.
Web Service будемо реалізовувати в класі
Service1
, Створеному в результаті при створенні
проекту. При бажанні ми могли створити свій клас, успадковував його з
System.Web.Services.WebService.

1.     
У Solution Explorer
подвійним клацанням миші відкрийтеService1
і відкрийте код через меню View
| Code.

2.     
Додайте метод для отримання даних. Метод буде створювати
новий dataset типу
ProductsDS1
і заповнювати його, використовуючи
SqlDataAdapter
. Після цього метод поверне
DataSet.

[WebMethod]

public ProductsDS1
GetProducts()

{

ProductsDS1
ds = new DataSet1();

sqlDataAdapter1.Fill (ds);

return ds;

          }

3.     
Додайте метод для збереження зроблених клієнтським
додатком змін назад в базу даних. Метод
Update
приймає
зміни в dataset.
Dataset повертається клієнтського додатку, яке відобразить
зміни у власному примірнику products1
dataset.

[WebMethod]

public ProductsDS1
UpdateProducts(ProductsDS1 ds)

{

if (ds! =
null)

{

sqlDataAdapter1.Update (ds);

return ds;

}

else

{

return
null;

                 
}

}

4.     
Збережіть всі файли і побудуйте проект –Build
| Build.

Отже, ми тільки що
створили об'єкт рівня бізнес логіки, методи якого доступні через
SOAP виклики. Від нас не треба було знання
XML і SOAP – С #
компілятор по атрибуту [WebMethod] знає, що
наш об'єкт повинен бути доступний за SOAP.
Подивимося, в якому форматі наш Web Service
повертає об'єкт DataSet. Для цього запустимо
Internet Explorer і вкажемо
URL: http://localhost/NorthwindProductsWS/Service1.asmx.
ASP.NET на основі
опису класу об'єкта, що реалізує Web Service,
згенерує сторінку, з якою ми можемо в інтерактивному режимі викликати
методи Web Service. Викличемо метод
GetProducts
. Для цього за посиланням перейдемо
на сторінку тестування методу і натиснемо Invoke.

 

Рис.

Повертані дані після виклику методу

GetProducts

 

Як ми бачимо XML
повідомлення, в якому передається DataSet,
містить і опис структури даних і самі дані.

Переходимо до створення Windows
додатка з GUI. Процес його створення
практично не відрізнятиметься від створення подібної програми в
Visual Basic 6.0.

 

Створення клієнтського
додатки з Windows GUI

1.     
Викличте менюFile
|Add Project
і клікніть на New Project .

2.     
У діалоговому вікні Add New Project
виберіть Visual
C# Projects
на панелі Project Types
і Windows Application
на панелі Templates.

3.     
Назвіть проектProductsWinClient.

 Form1
автоматично додасться до проекту і з'явиться у візуальному дизайнері
форм.

4.     
Додайте посилання на наш Web Service:

a.     
У Solution Explorer
клікніть правою кнопкою миші на
ProductsWinClient

проект, і виберіть Add Web Reference
на спадаючому меню.

b.     
Клацніть по посиланню Web References on
Local Web Server
.

c.     
З списку, що з'явився посилань виберіть посилання на
NorthwindProductsWS

d.     
Натисніть Add Reference

Тепер ми можемо створювати
екземпляри products1
dataset у клієнтському додатку.

Додавання посилання на WebService дуже схоже
на додавання посилання на бібліотеку типів ActiveX
об'єкта в Visual Basic 6.0. Тільки
інформацію про типи в першому випадку Visual Studio
бере у форматі WSDL, а в другому в форматі
TypeLibrary. Попутно зауважу, що
WSDL для нашого Web Service
ASP.NET генерує
на льоту, у чому можна переконатися, вказавши посилання

http://localhost/NorthwindProductsWS/Service1.asmx?WSDL
в
Internet Explorer.

Список
доступних WebServices Visual Studio отримує
з файлу DISCO на Web
сервері.

 

Залишилося
створити інтерфейс для роботи з dataset.

1.     
Відбуксують DataGrid
control з Windows Forms
панелі з Toolbox
на форму.

2.     
Додайте на формуButton
control, встановивши для неї властивість Name
в LoadData
і властивість Text
в Завантажити.

3.     
Додайте на форму ще одну Button
control, встановивши для неї властивість Name
в SaveData
і властивість Text
в Зберегти.

4.     
Відбуксують DataSet
об'єкт з Data
панелі з Toolbox
на форму. Відкриється дилогії Choose a DataSet.
Виберіть Typed dataset
і вкажіть
"ProductsWinClient.ServerName.ProductsDS1" зі списку
Name
. Visual Studio.NET
створить DataSet
об'єкт на основі визначення класу
productsDS1
.

5.     
Виберіть DataSet
control і встановіть властивістьName
в ProductData.

6.     
Виберіть DataGrid
control і вкажіть ProductData
зі списку у властивості DataSource.
Виберіть products зі списку у властивості
DataMember .
Назви колонок DataGrid
будуть встановлені в назви колонок з таблиці
Products
.

Додамо код для кнопок

1.     
Подвійним клацанням миші по кнопці LoadData
відкрийте порожній обробник події Click.
Для звернення до Web Service спочатку створимо
екземпляр об'єкта, а потім викличемо його методи. Повернутий
dataset з методу
GetProducts з'єднується з ProductData
dataset.

     

private
void Load_Click(object
sender, System.EventArgs e)

{

ProductsWinClient.localhost.Service1 ws =

new
ProductsWinClient.localhost.Service1();

this.dataSet11.Merge (ws.GetProducts ());

      }

2.     
Реалізуйте обробник події Click
для кнопки Save.

Якщо є зміни в
dataset, новий dataset типу
productsDS1
створюється для збереження
щойно змінених даних. Потім він передається в метод
UpdateProducts

нашого Web Service. Після повернення з методу
він містить прийняті зміни і ProductData
dataset приймає ці зміни.

private
void Save_Click(object
sender, System.EventArgs e)

{

if (
dataSet11.HasChanges())

{

 

ProductsWinClient.localhost.Service1 ws =

new
ProductsWinClient.localhost.Service1();

ProductsWinClient.localhost.DataSet1 diffDS =

new
ProductsWinClient.localhost.DataSet1();

 

diffDS.Merge (dataSet11.GetChanges ());

ws.UpdateProducts (diffDS);

dataSet11.Merge (diffDS);

}

}

3. Виберіть ProductsWinClient
в Solution Explorer, І по
натискання на праву кнопки миші, через відповідний пункт спадаючого
меню, вкажіть це проект як StartUp Project.

4. Запустіть
додаток, натиснувши на F5.

Протестуйте наше клієнтське додаток, натискаючи на кнопки і вносячи
зміни в дані.

Створення клієнтської програми з Web
інтерфейсом

Побудуємо тепер додаток з
Web інтерфейсом і використовуємо той же самий
об'єкт рівня бізнес логіки.

1.     
Для створення Web програми вкажіть
ASP.NET Web Application
 
в діалозі створення нового проекту.

2.     
Назвіть ProductsWebClient.

Сторінка з Web Form
–  WebForm1.aspx –
буде додана до проекту і завантажена в дизайнер.

3.     
Додайте посилання на Web Service,
точно так само, як зробили це для проекту з Windows
додатком

4. Відбуксують
DataSet
control
з панеліData
з Toolbox
на форму. У діалоговому вікніChoose a
DataSet
виберіть
TypedDataSet
і
вкажіть "ProductsWebClient.ServerName.Products1"
в списку Name
.  DataSet
control буде додана на форму.

5.  
Для DataSet
control встановіть совйство Name
в ProductData.

6.  
Відбуксують DataGrid
control з панелі Web Forms з
Toolbox на
форму.

7.  
У вікніProperties
для DataGrid
control встановіть DataSource
властивість в ProductData
іDataMember властивість вproducts.
Ці установки повинні пропонуватися в спадаючих списках. Назви
колонок DataGrid
будуть встановлені в назви колонок з таблиці
Products
.

8. Для підтримки
редагування на місці вDataGrid
control, Ви повинні додати Edit,
Update, Cancel

колонку, яка буде містити кнопку редагування. Коли
користувач натисне кнопку редагування рядок буде
відображено в TextBox (окремо для кожної
колонки), і кнопка редагування буде замінена на
Update
і
Cancel
кнопки.
Щоб додати цю кнопку:

a.     
Натисніть наProperty Builder
посилання внизу вікна Properties
і виберітьColumns
панель в діалоговому вікні.

b.     
Розкрийте вузол Button Column
в панелі Available Columns.

c.     
Виберіть Edit, Update, Cancel
і натисніть кнопкуAdd
.

d.     
Натисніть OK.

Додамо код для кнопок

1.     
По натисненню правої клавіші миші виберіть з випадаючого меню
View Code
.
Додамо код до події Page_Load.
У цьому фрагменті ми створимо екземпляр нашого
Web Service, заповнимо ProductData
dataset, і зв'яжемо його з DataGrid.
Кожен раз, коли сторінка відправляється клієнтові у відповідь на запроc,
таблиця буде містити свіжу копію даних з бази даних.

private
void Page_Load(object
sender, System.EventArgs e)

{

/ / Put user code to
initialize the page here

                 

ProductsWebClient.localhost.Service1 ws =

new
ProductsWebClient.localhost.Service1();

this.dataSet11.Merge (ws.GetProducts ());

if (! Page.IsPostBack)

{

DataGrid1.DataBind ();

                 
}

 

}

2.     
Коли користувач натискає кнопкуEdit,
генерується подіяEditCommand
об'єкта DataGrid. Використовуємо це
подія для зміни індексу EditItemIndex
в DataGrid. Рядок із зазначеним
індексом відобразиться у вигляді набору TextBox.

 

Створюємо обробник
подій для EditCommand. :

У oкне
властивостей для DataGrid натисніть на кнопку
Events і відобразіть список подійDataGrid.
Додайте код до події EditCommand
.

 

private
void DataGrid1_EditCommand(object
source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

           
DataGrid1.EditItemIndex = e.Item.ItemIndex;

           
      DataGrid1.DataBind();

      }

3.     
Створіть обробник помилок для події
CancelCommand

private
void DataGrid1_CancelCommand(object
source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

DataGrid1.EditItemIndex = -1;

DataGrid1.DataBind ();

}

Коли
користувач натискає на кнопкуCancel
, Генерується подіяCancelCommand
об'єктаDataGrid. Встановимо в
коді для цієї події EditItemIndex
в -1 так що поточний рядок буде відображатися знову у вигляді
набору TextBox.

4.     
Коли користувач натискає наUpdate
, Генерується подія UpdateCommand
об'єкта DataGrid
. У цій події ми повинні отриматиProductData
dataset зі змінами з DataGrid
і провести ці зміни назад в базу даних через звернення до
Web Service.

 

private
void DataGrid1_UpdateCommand(object
source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

for (
int i = 0; i<
DataGrid1.Columns.Count-1; i++)

{

TextBox tb =
(TextBox)e.Item.Cells[i].Controls[0];

                       

DataRow row =
dataSet11.products[e.Item.DataSetIndex];

row [DataGrid1.Columns [i]. HeaderText] = tb.Text;

                 

}

if (dataSet11.HasChanges ())

{

ProductsWebClient.localhost.Service1 ws =

   new
ProductsWebClient.localhost.Service1();

ProductsWebClient.localhost.DataSet1 ds =

  

new
ProductsWebClient.localhost.DataSet1();

ds.Merge (dataSet11.GetChanges ());

ws.UpdateProducts (ds);

dataSet11.Merge (ds);

}

DataGrid1.EditItemIndex = -1;

DataGrid1.DataBind ();

 

}

5.     
Виберіть ProductsWebClient
в Solution Explorer,
і після натискання на праву клавішу миші виберіть його як
Set as StartUp Project
.

6.     
Запустіть програму, натиснувши на F5.

Зазначимо, що створення
Web додатків c
використанням ASP.NET
відбувається аналогічно створення Windows
додатків з GUI. Ми окремо працювали з
формою нашої сторінки і окремо писали код для обробки помилок. Ніщо
не нагадувало "кашу" ASP сторінок, з
перемісила HTML тегами і шматками скриптів.

Крім
Visual Studio.NET 
Microsoft пропонує і інші інструменти для створення та
використання Web Services.
SOAP Toolkit можна використовувати разом з
Visual Studio 6.0. SOAP Toolkit
надає об'єкти для генерування proxy, які
беруть на себе рівень взаємодії по SOAP і
ви звертаєтеся до Web Services як до звичайних
COM об'єктів. SOAP Toolkit
містить два набори інтерфейсів – високорівнева і
низькорівневий, для можливості впливати на створювані
SOAP повідомлення. Додатково до
SOAP Toolkit можна використовувати
Web Service Proxy Wizard, який додається
як Add-On до середовища
Visual C++ 6.0.  Web
Service Proxy Wizard генерує клас на основі
Web Services і бібліотеку типів для цього
класу. Це дозволяє використовувати раннє зв'язування в проектах у
Visual Basic 6.0 при зверненні до
Web Service. Згенерований клас працює
через SOAP Toolkit на низькорівневої
інтерфейсі. Крім того, для Internet Explorer
доступний HTC компонент, який

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*