<
  • Главная
Статьи

Працюємо з Mono: Частина 11. Створення і використання Web-служб

  1. Серія контенту:
  2. Цей контент є частиною серії: Працюємо з Mono
  3. Використання Web-служби від стороннього постачальника
  4. Лістинг 1. Виконання запиту до Web-службі
  5. Малюнок 1. Результат виконання запиту до Web-службі
  6. Лістинг 2. Вихідний код Web-служби
  7. Лістинг 3. Конфігураційний файл для Web-служби OurWebService
  8. Малюнок 2. Результат завантаження сторінки Web-служби
  9. Малюнок 3. Зведена інформація про Web-службі
  10. Малюнок 4. Вихідний код для створення збірки-заглушки
  11. Малюнок 5. Зведена інформація про метод Web-служби
  12. Лістинг 4. Вихідний код файлу Default.aspx
  13. Лістинг 5. Додаткові елементи керування
  14. Лістинг 6. Обробник події натискання на кнопку
  15. Малюнок 8. Результат виконання ASP.NET додатки
  16. висновок
  17. Ресурси для скачування

Працюємо з 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-службі
Працюємо з Mono   Серія контенту:   Цей контент є частиною # з серії # статей: Працюємо з Mono   https://www

Розробка 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?


Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью