Новий “універсальний клей” – Web Services, Web Services, ASP, статті

Проблеми повторного використання програмного забезпечення та інтегрування різних інформаційних систем виникли на зорі розвитку 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 і вкажіть localhost
в якості Web сервера.

5.     
Після натисніть на OK
і Visual Studio создаcт новий 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 генерує на льоту, у чому можна переконатися, вказавши посилання

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>

*

*