Працюємо з Mono: Частина 11. Створення і використання Web-служб
- Серія контенту:
- Цей контент є частиною серії: Працюємо з Mono
- Використання Web-служби від стороннього постачальника
- Лістинг 1. Виконання запиту до Web-службі
- Малюнок 1. Результат виконання запиту до Web-службі
- Лістинг 2. Вихідний код Web-служби
- Лістинг 3. Конфігураційний файл для Web-служби OurWebService
- Малюнок 2. Результат завантаження сторінки Web-служби
- Малюнок 3. Зведена інформація про Web-службі
- Малюнок 4. Вихідний код для створення збірки-заглушки
- Малюнок 5. Зведена інформація про метод Web-служби
- Лістинг 4. Вихідний код файлу Default.aspx
- Лістинг 5. Додаткові елементи керування
- Лістинг 6. Обробник події натискання на кнопку
- Малюнок 8. Результат виконання ASP.NET додатки
- висновок
- Ресурси для скачування
Працюємо з Mono
Серія контенту:
Цей контент є частиною # з серії # статей: Працюємо з Mono
https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**
Слідкуйте за виходом нових статей цієї серії.
Цей контент є частиною серії: Працюємо з Mono
Слідкуйте за виходом нових статей цієї серії.
В останні роки Web-служби починають грати все більшу роль в житті Інтернет-спільноти. Користувачі постійно чують про новинки в області хмарних обчислень, звикають до ідеї «оренди» програмного забезпечення замість його покупки. Всі ці нововведення багато в чому засновані на платформі Web-служб, що складається з серверної частини, що надає певну функціональність, і клієнтських модулів, що викликають цю функціональність.
На платформі .NET framework (а також Mono) давно існують зручні механізми, що дозволяють спростити роботу з Web-службами за допомогою технологій ASP.NET і їм подібних. При цьому клієнтського додатку необов'язково знати, локально чи або віддалено розташовується викликається ним функція.
Для взаємодії між клієнтом і постачальником Web-служби використовується протокол SOAP (Simple Object Access Protocol) для обміну структурованими повідомленнями у вигляді XML-документів. Протокол SOAP може використовуватися поверх будь-якого протоколу прикладного рівня (HTTP, HTTPS, SMTP, FTP), але для роботи з Web-службами найчастіше використовуються протоколи HTTP і HTTPS.
Використання Web-служби від стороннього постачальника
В якості прикладу візьмемо Web-служба Центрального Банку Російської Федерації , Що надає інформацію про різних економічних показниках, наприклад, курсах різних валют. Документація для цієї Web-служби знаходиться на сайті ЦБ РФ . Також звідти можна завантажити WSDL-документ , Що описує інтерфейс Web-служби.
У даній статті буде створено консольний додаток, яке буде запитувати курси валют на поточний день і виводити в консоль курси євро (EUR) і долара (USD) по відношенню до рубля.
Одним із способів роботи з Web-службами в середовищі Mono є створення спеціальної збірки-заглушки (proxy), яка експортує методи, що надаються Web-службою, транслює клієнтські виклики в запити протоколу SOAP і повертає отримані відповіді клієнтського додатку. Тому з точки зору клієнтського додатка немає ніякої різниці, як реалізовані викликаються методи: локально або віддалено.
Для створення збірки-заглушки використовується інструмент wsdl, що генерує вихідний код класу Web-служби мовою C # згідно з інформацією, що міститься в WSDL-документі. Надалі отриманий клас буде скомпільовано в збірку-заглушку:
wsdl http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL -out: CBCurrencyRates.cs -namespace: TestWebService gmcs / target: library CBCurrencyRates.cs -r: System.Web.Services -r: System.Data
Ключ -out визначає назву генерується cs-файлу, а ключ -namespace вказує простір імен для генерованого класу. Посилання на складання System.Web.Services.dll потрібно для роботи з Web-службами, а посилання на збірку System.Data.dll необхідна для роботи зі структурами даних DataSet (ця структура повертається деякими функціями Web-служби).
Web-служба експортує клас DailyInfo, один з методів якого повертає курси валют на певну дату у вигляді XML-документа.
XmlNode GetCursOnDateXML (DateTime dt);
XML-документ, повернутий службою містить набір елементів ValuteCursOnDate, кожен з яких в свою чергу містить наступні елементи:
- Vname - назва валюти;
- Vnom - множник для валюти (для якої кількості валюти встановлений курс, наприклад, за 1 долар, за 100 ієн і т.д.);
- Vcurs - курс валюти (рублів за Vnom одиниць валюти);
- Vcode - міжнародний числовий код валюти;
- VchCode - міжнародний символьний код валюти (наприклад, USD - долар США, EUR - євро).
Надалі залишиться тільки проаналізувати отриманий XML-документ і витягти необхідні дані. У лістингу 1 наведено приклад запиту даних про курсах валют за поточну дату з Web-служби і виведення отриманої інформації на екран.
Лістинг 1. Виконання запиту до Web-службі
using System; using System.Xml; namespace TestWebService {class MainClass {public static void Main (string [] args) {DailyInfo di = new DailyInfo (); XmlNode nodes = di.GetCursOnDateXML (DateTime.Now); foreach (XmlNode node in nodes) {if ((node [ "VchCode"]. InnerText == "EUR") || (node [ "VchCode"]. InnerText == "USD")) {Console.WriteLine ( "Дата : "+ DateTime.Now.Date.ToString ()); Console.WriteLine ( "Валюта:" + node [ "Vname"]. InnerText.TrimEnd ()); Console.WriteLine ( "Курс:" + node [ "Vcurs"]. InnerText + "RUR за" + node [ "Vnom"]. InnerText + "" + node [ "VchCode"]. InnerText); Console.WriteLine ( "--------------------"); }}}}}
Даний клас компілюється з підключенням посилання на CBCurrencyRates.dll, як показано нижче:
gmcs TestService.cs -r: CBCurrencyRates
Результат запуску додатка наведено на малюнку 1.
Малюнок 1. Результат виконання запиту до Web-службі
Розробка Web-служби
Для створення власної Web-служби необхідно розробити її інтерфейс. Під інтерфейсом мається на увазі реалізація класу Web-служби з методами, доступними віддалено. Web-служба може являти собою складний додаток, що використовує як стандартні, так і сторонні, а також власні збірки, однак ці можливості будуть доступні тільки локально. Віддалений доступ буде можливий тільки до методів, реалізованим в .asmx-файлі.
У даній статті буде розроблена проста Web-служба, що надає метод для обчислення кореня лінійного рівняння. Вихідний код цієї Web-служби приведений в лістингу 2.
Лістинг 2. Вихідний код Web-служби
<% @ WebService Language = "C #" Class = "Equation.Equation"%> using System; using System.Web.Services; namespace Equation {[WebService (Namespace = "http: // localhost / OurWebService", Description = "Service for finding linear equation root")] public class Equation: WebService {[WebMethod (Description = "Returns root, using coeffs a and b ")] public double FindRoot (double a, double b) {return (-b / a); }}}
Клас, який реалізує Web-службу, повинен успадковуватися від стандартного класу System.Web.Services.WebService. Атрибут WebService описує реалізовану Web-службу, в даному випадку задаються простір імен (URL-адресу розгортання Web-служби) і її опис. Методи, що надаються Web-службою, позначаються атрибутом WebMethod.
Web-служба буде розгорнута на локальному сервері Apache. Розташування необхідних конфігураційних файлів і каталогів, що використовуються в прикладі, традиційно відповідає дистрибутива Ubuntu.
Спочатку потрібно створити каталог OurWebService в каталозі / var / www (це необхідно робити від імені користувача, що володіє відповідними правами):
cd / var / www mkdir OurWebService cd OurWebService
Вихідний код з лістингу 2 необхідно зберегти в цей каталог в файл OurWebService.asmx. У лістингу 3 наведено вміст конфігураційного файлу, необхідного для розгортання Web-служби на сервері Apache.
Лістинг 3. Конфігураційний файл для Web-служби OurWebService
<VirtualHost *: 80> ServerName OurWebService ServerAdmin web-admin @ OurWebService DocumentRoot / var / www / OurWebService MonoServerPath OurWebService "/ usr / bin / mod-mono-server2" MonoSetEnv OurWebService MONO_IOMAP = all MonoApplications OurWebService "/: / var / www / OurWebService "<Location" / "> Allow from all Order allow, deny MonoSetServerAlias OurWebService SetHandler mono SetOutputFilter DEFLATE SetEnvIfNoCase Request_URI" \. (?: gif | jpe? g | png) $ "no-gzip dont-vary </ Location> < IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text / html text / plain text / xml text / javascript </ IfModule> </ VirtualHost>
Цей файл необхідно зберегти в каталозі / etc / apache2 / sites-available під ім'ям OurWebService і додати в файл / etc / hosts наступний рядок:
127.0.0.1 OurWebService
Залишається тільки підключити сайт (попередньо відключивши автоматичне налаштування плагіна mod_mono) і перезапустити Web-сервер Apache, як показано нижче.
a2dismod mod_mono_auto a2enmod mod_mono a2ensite OurWebService /etc/init.d/apache2 restart
Для перевірки працездатності Web-служби в адресний рядок браузера слід ввести наступний URL: http: //OurWebService/OurWebService.asmx .
Малюнок 2. Результат завантаження сторінки Web-служби
За замовчуванням Web-служба відкривається в режимі Overview (огляд). У бічному меню можна переглянути різну інформацію про Web-службі. Пункт Service Description дає можливість завантажити WSDL-документ з XML-описом Web-служби, як показано на малюнку 3.
Малюнок 3. Зведена інформація про Web-службі
Пункт Client Proxy надає вихідний код для створення збірки-заглушки на мовах C # або Visual Basic.
Малюнок 4. Вихідний код для створення збірки-заглушки
Далі йде опис методів (в даному випадку тільки одного методу), що надаються Web-службою. На цій сторінці можна переглянути опис методу (Overview), передати йому параметри і отримати відповідь за допомогою тестової форми (Test Form) або отримати опис запитів і відповідей різного типу у вигляді SOAP, HTTP GET і HTTP POST (Message Layout).
Малюнок 5. Зведена інформація про метод Web-служби
Малюнок 6. Форма для тестування методу
Малюнок 7. Приклади запитів і відповідей для даного методу
Використання власної Web-служби
Використання самостійно розробленої Web-служби з точки зору клієнта нічим не відрізняється від використання Web-служби, наданої третьої сторони, яка була розглянута вище. Тому, щоб уникнути повторень, в даному розділі буде розглядатися використання Web-служби з ASP.NET додатки.
Спочатку, як і в попередньому варіанті, потрібно згенерувати збірку-заглушку:
wsdl http: //OurWebService/OurWebService.asmx? wsdl = 0 -out: OurWebService.cs -namespace: TestOurWebService gmcs / target: library OurWebService.cs -r: System.Web.Services
Для виклику Web-служби в середовищі розробки MonoDevelop необхідно створити стандартний проект ASP.NET-додатка з назвою TestOurWebService. У файл Default.aspx потрібно внести зміни, показані в лістингу 4.
Лістинг 4. Вихідний код файлу Default.aspx
<% @ Page Language = "C #" Inherits = "TestOurWebService.Default"%> <! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Strict // EN" "http://www.w3.org/TR /xhtml1/DTD/xhtml1-strict.dtd "> <html> <head runat =" server "> <title> Default </ title> </ head> <body> <form id =" form1 "runat =" server " > <p> Coefficient A: <asp: TextBox id = "tb1" runat = "server" /> </ p> <p> Coefficient B: <asp: TextBox id = "tb2" runat = "server" /> < / p> <asp: Button id = "button1" runat = "server" Text = "Count Equation" OnClick = "button1Clicked" /> <p> Result: <asp: TextBox id = "tb3" runat = "server" / > </ p> </ form> </ body> </ html>
У файл Default.aspx.designer.cs в класі Default необхідно буде додати поля, що описують додаткові елементи управління.
Лістинг 5. Додаткові елементи керування
protected System.Web.UI.WebControls.TextBox tb1; protected System.Web.UI.WebControls.TextBox tb2; protected System.Web.UI.WebControls.TextBox tb3;
А в файлі Default.aspx.cs потрібно змінити реалізацію методу, що відповідає за обробку події натискання на кнопку, щоб при його виникненні викликався метод розробленої Web-служби.
Лістинг 6. Обробник події натискання на кнопку
public virtual void button1Clicked (object sender, EventArgs args) {string a = tb1.Text; string b = tb2.Text; double d_a = Double.Parse (a); double d_b = Double.Parse (b); Equation eq = new Equation (); double res = eq.FindRoot (d_a, d_b); tb3.Text = res.ToString (); }
Також необхідно додати в проект посилання на створену раніше збірку-заглушку. Після складання проекту буде створено каталог bin з файлами OurWebService.dll (збірка-заглушка) і TestOurWebService.dll (додаток для виклику Web-служби) і залишиться тільки розгорнути вийшло ASP.NET-додаток.
Розгортання ASP.NET-додатка виконується аналогічно розгортання Web-служби, яке вже розглядалося вище:
- створити каталог TestOurWebService в каталозі / var / www;
- скопіювати в нього каталог bin з двома збірками, а також файли Default.aspx і web.config;
- створити в каталозі / etc / apache2 / sites-available файл TestOurWebService;
- скопіювати в цей файл вміст лістингу 3, замінивши OurWebService на TestOurWebService;
- додати рядок, що описує Web-сайт TestOurWebService, в файл / etc / hosts;
- підключити сайт TestOurWebService (за допомогою команди a2ensite);
- перезапустити Web-сервер Apache.
Для відкриття Web-додатки в адресному рядку браузера необхідно ввести URL-адресу: http: // TestOurWebService . На отриманій в результаті HTML-сторінці буде форма, в якій можна буде отримати результат, задавши коефіцієнти A і B лінійного рівняння і натиснувши кнопку.
Малюнок 8. Результат виконання ASP.NET додатки
Створений проект знаходиться в розділі Завантаження в файлі TestOurWebService.zip .
висновок
У даній статті були розглянуті питання, пов'язані з написанням і використанням Web-служб в середовищі Mono. З урахуванням того, що Web-служби постійно завойовують нові позиції на ландшафті IT-індустрії, розглянуті аспекти можуть виявитися дуже корисними як для розробників і постачальників Web-служб, так і для розробників клієнтських додатків, що викликають ці Web-служби.
Ресурси для скачування
Схожі теми
Підпишіть мене на повідомлення до коментарів
Com/developerworks/ru/library/?Asmx?
Gif | jpe?
Asmx?