Що таке WSDL? Значення та приклад
⚡ Розумний підсумок
WSDL (веб-сервіси Description Language) – це файл на основі XML, який повідомляє клієнтській програмі, що робить веб-сервіс і як його викликати. У цьому ресурсі пояснюється структура WSDL, елементи, повідомлення, типи портів, прив’язки та приклад публікації.
Що таке WSDL?
Web-сервіси Descriptіонна мова (WSDL) — це файл на основі XML, який в основному повідомляє клієнтській програмі, що робить веб-служба. Файл WSDL використовується для короткого опису того, що робить веб-служба, і надає клієнту всю інформацію, необхідну для підключення до веб-служби та використання всіх функцій, які надає веб-служба.
У цьому посібнику ми зосередимося на найважливішій частині веб-сервісів, а саме на WSDL, або веб-сервісах. DescriptМова іонів. Вона діє як конtracміж веб-сервісом та будь-яким клієнтом, який хоче його використовувати.
Структура документа WSDL
Для опису веб-сервісу використовується документ WSDL. Цей опис потрібен для того, щоб клієнтські програми могли зрозуміти, що насправді робить веб-сервіс.
- Файл WSDL містить розташування веб-сервісу та
- Методи, які надає веб-служба.
Сам WSDL-файл може здаватися дуже складним для будь-якого користувача, але він містить всю необхідну інформацію, яка потрібна будь-якому клієнтському застосунку для використання відповідного веб-сервісу. Нижче наведено загальну структуру WSDL-файлу:
- Визначення
- TargetПростір імен
- Типи даних
- повідомлення
- Тип порту
- палітурки
- Обслуговування
Одна ключова річ, яку слід тут зазначити, це визначення повідомлень, тобто те, що передається протокол SOAP, насправді визначено в документі WSDL. Документ WSDL повідомляє клієнтській програмі, які типи SOAP-повідомлень надсилаються та приймаються веб-сервісом.
Іншими словами, WSDL — це як листівка, яка містить адресу певного місця. Адреса містить детальну інформацію про те, куди має бути доставлено повідомлення. Отже, так само файл WSDL — це листівка, яка містить адресу веб-сервісу, який може забезпечити всю функціональність, необхідну клієнту.
<!-- WSDL definition structure --> <definitions name="Guru99Service" targetNamespace=http://example.org/math/ xmlns=http://schemas.xmlsoap.org/wsdl/> <!-- abstract definitions --> <types> ... <message> ... <portType> ... <!-- concrete definitions --> <binding> ... <service> ... </definition>
Нижче наведено схему структури WSDL-файлу.
Структура WSDL
Елементи WSDL
Файл WSDL містить такі основні частини:
- Команда Тег використовується для визначення всіх складних типів даних, які будуть використовуватися в повідомленні, що обмінюється між клієнтською програмою та веб-сервісом. Це важливо, тому що якщо веб-сервіс працює зі складним типом даних, то клієнтська програма повинна знати, як його обробляти. Такі типи даних, як числа з плаваючою комою, числа та рядки, є простими типами даних, але веб-сервіс може надавати структуровані типи даних. Наприклад, може існувати тип даних під назвою EmployeeDataType, який може мати 2 елементи під назвою «EmployeeName» типу string та «EmployeeID» типу number або integer. Разом вони утворюють складний тип даних.
- Команда Тег використовується для визначення повідомлення, яке обмінюється між клієнтською програмою та веб-сервером. Ці повідомлення пояснюють операції введення та виведення, які може виконувати веб-сервіс. Прикладом повідомлення може бути повідомлення, яке приймає EmployeeID співробітника, а вихідним повідомленням може бути ім'я співробітника на основі наданого EmployeeID.
- Команда тег використовується для інкапсуляції кожного вхідного та вихідного повідомлення в одну логічну операцію. Отже, може бути операція під назвою «GetEmployee», яка поєднує вхідне повідомлення про прийняття EmployeeID від клієнтської програми та надсилання EmployeeName як вихідне повідомлення.
- Команда Тег використовується для прив'язки операції до певного типу порту. Це робиться для того, щоб, коли клієнтська програма викликає відповідний тип порту, вона мала доступ до операцій, пов'язаних з ним. Типи портів подібні до інтерфейсів. Тому, якщо клієнтській програмі потрібно використовувати веб-сервіс, їй потрібно використовувати інформацію про прив'язку, щоб переконатися, що вона може підключитися до інтерфейсу, що надається цим веб-сервісом.
- Команда Тег — це ім'я, надане самому веб-сервісу. Спочатку, коли клієнтська програма здійснює виклик веб-сервісу, вона робить це, викликаючи ім'я веб-сервісу. Наприклад, веб-сервіс може бути розташований за адресою, такою як http://localhost/Guru99/Tutorial.asmx. Тег обслуговування матиме URL визначено, що повідомляє клієнтській програмі про доступність веб-сервісу в цьому місці.
Чому WSDL
Веб-сервіс є важливим компонентом у створенні сучасних веб-додатків. Його головне призначення — дозволити кільком додаткам, побудованим на різних мовах програмування, взаємодіяти один з одним. Наприклад, веб-додаток .Net може взаємодіяти з Java програму через веб-службу.
Веб-сервіс має такі ключові характеристики:
- Він побудований за допомогою мови програмування XML. Майже всі сучасні технології, такі як .Net та Java мають відповідні команди, які мають можливість працювати з XML. Тому XML було прийнято як найбільш підходящу мову для створення веб-сервісів.
- Веб-сервіси взаємодіють через HTTP. HTTP – це протокол, який використовується всіма веб-додатками. Отже, було доцільно забезпечити, щоб веб-сервіси також мали можливість працювати через протокол HTTP.
- Веб-сервіси відповідають специфікації певної мови. Ця специфікація встановлюється W3C, яка є керівним органом для всіх веб-стандартів.
- Веб-сервіси мають мову опису, відому як WSDL, яка використовується для опису веб-сервісу.
Файл WSDL написаний у звичайному XML. Причина, чому він написаний у XML, полягає в тому, що файл може бути прочитаний будь-якою мовою програмування. Тож, якщо клієнтська програма була написана в .Net, вона зрозуміє XML-файл. Аналогічно, якщо клієнтська програма була написана в Java мова програмування, тоді вона також зможе інтерпретувати файл WSDL.
Файл WSDL – це те, що об’єднує все разом. З наведеної вище діаграми видно, що веб-сервіс можна створити мовою .Net. Саме тут реалізується сервіс. Якщо у вас не було файлу WSDL, а ви хотіли Java клас для використання веб-сервісу, вам знадобиться багато зусиль з кодування, щоб досягти цього. Але тепер, завдяки файлу WSDL, який представлений у форматі XML і може бути зрозумілий будь-якою мовою програмування, ви можете легко мати Java використовувати веб-службу .Net. Таким чином, кількість зусиль кодування значно зменшується.
Частина повідомлення WSDL
WSDL складається з розділу під назвою «повідомлення», який позначається символом елемент. Цей елемент в основному використовується для опису даних, якими обмінюються веб-сервіс та клієнтська програма.
Кожен вебсервіс завжди матиме 2 типи повідомлень:
- Один призначений для введення веб-служби, а інший для виведення веб-служби.
- Вхідні дані використовуються для опису параметрів, які приймає веб-служба. Це важливий аспект клієнтської програми, щоб вона знала значення, які потрібно надіслати як параметри до веб-служби.
- Інший тип повідомлення – вихідне повідомлення, яке повідомляє, які результати надає веб-служба.
Кожне повідомлення, у свою чергу, матиме a елемент, який використовується для опису параметра, що використовується вхідним і вихідним повідомленнями.
Нижче наведено простий приклад того, як виглядає повідомлення для веб-сервісу. Функціональність веб-сервісу полягає в наданні назви «Посібника» після того, як «Ідентифікатор посібника» надсилається як параметр до веб-сервісу.
- Як ми бачимо, вебсервіс має 2 повідомлення, одне для вхідних даних, а інше для вихідних.
- Вхідне повідомлення називається TutorialNameRequest і має один параметр під назвою TutorialID. Цей параметр має тип number, який визначається типом xsd:number.
- Вихідне повідомлення називається TutorialNameResponse та має один параметр під назвою TutorialName. Цей параметр має тип string, який визначається типом xsd:string.
Прив'язка типу порту
Порти використовуються в WSDL для визначення однієї повної операції, яку пропонує веб-сервіс. У попередньому розділі ми бачили, що наш веб-сервіс надає 2 повідомлення: одне для вхідних даних під назвою «TutorialNameRequest» та інше для вихідних даних під назвою «TutorialNameResponse». Разом вхідне та вихідне повідомлення утворюють те, що називається однією повною операцією.
WSDL надає елемент під назвою який використовується для визначення операцій, які надає веб-служба.
Отже, у нашому прикладі вище ми можемо відзначити наступне:
- Назва типу порту, який інкапсулює операцію, задається як «Tutorial_PortType».
- Самій операції надається ім'я «Tutorial». Отже, наша операція фактично надає TutorialName, якщо TutorialID задано як вхідний параметр.
- Далі йдуть наші 2 повідомлення, одне для вхідних даних, а інше для вихідних, які формують нашу операцію.
На додаток до елемент, є також елемент, який використовується для визначення способу передачі повідомлень.
- У наведеному вище прикладі показано, що прив’язка складається з назви прив’язки, яка в нашому випадку має назву «TutorialSoapBinding». Прив’язка, простими словами, – це інформація, яку клієнтська програма використовує для фактичного прив’язування до веб-сервісу. Після прив’язки до веб-сервісу вона отримує можливість викликати різні операції, що надаються веб-сервісом.
- Транспортний рівень має формат http://, що означає, що повідомлення будуть передаватися через протокол HTTP.
Створення файлу WSDL
Файл WSDL створюється щоразу, коли веб-сервіс будується будь-якою мовою програмування. Оскільки файл WSDL досить складно створити з нуля, усі редактори, такі як Visual Studio для .Net та Eclipse та цінності Java автоматично створити файл WSDL.
Нижче наведено приклад файлу WSDL, створеного у Visual Studio.
<?xml version="1.0"?> <definitions name="Tutorial" targetNamespace=http://Guru99.com/Tutorial.wsdl xmlns:tns=http://Guru99.com/Tutorial.wsdl xmlns:xsd1=http://Guru99.com/Tutorial.xsd xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace=http://Guru99.com/Tutorial.xsd xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TutorialNameRequest"> <complexType> <all> <element name="TutorialName" type="string"/> </all> </complexType> </element> <element name="TutorialIDRequest"> <complexType> <all> <element name="TutorialID" type="number"/> </all> </complexType> </element> </schema> </types> <message name="GetTutorialNameInput"> <part name="body" element="xsd1:TutorialIDRequest"/> </message> <message name="GetTutorialNameOutput"> <part name="body" element="xsd1:TutorialNameRequest"/> </message> <portType name="TutorialPortType"> <operation name="GetTutorialName"> <input message="tns:GetTutorialNameInput"/> <output message="tns:GetTutorialNameOutput"/> </operation> </portType> <binding name="TutorialSoapBinding" type="tns:TutorialPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetTutorialName"> <soap:operation soapAction="http://Guru99.com/GetTutorialName"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="TutorialService"> <documentation>TutorialService</documentation> <port name="TutorialPort" binding="tns:TutorialSoapBinding"> <soap:address location="http://Guru99.com/Tutorial"/> </port> </service> </definitions>
Наведений вище WSDL-файл виглядає дуже лякаюче для будь-якого користувача. Ми детально розглянемо різні його частини в наступних навчальних посібниках, а зараз давайте коротко розглянемо, що насправді робить кожен розділ WSDL-файлу.
Публікація прикладу веб-сервісу
Тепер розглянемо приклад того, як ми можемо опублікувати веб-сервіс та використовувати його за допомогою Visual Studio. У цьому прикладі ми створимо веб-сервіс з одним WebMethod. Цей метод прийматиме цілочисельний параметр під назвою «TutorialID». Потім веб-метод поверне рядок під назвою «Web Services».
Потім ми створимо консольний застосунок, який використовуватиме цей веб-сервіс і відповідно викликатиме наш веб-метод. Розглянемо кроки, необхідні для виконання цього прикладу.
Крок 1) Першим кроком є створення веб-сервісу. Детальні кроки того, як Asp.Net було пояснено створення веб-проекту та веб-сервісу тутБудь ласка, виконайте ті самі кроки, щоб створити проект і веб-сервіс відповідно. Ключова частина полягає в тому, щоб ввести наведений нижче код у файл веб-сервісів.
namespace webservic_asmx { [WebService(Name = "Guru99 Web service")] public class TutorialService : System.Web.Services.WebService { [WebMethod] public string GetTutorialService(int TutorialID) { string TutorialName = "Web Services"; return TutorialName; } } }
Code Пояснення:
- Тут ми створюємо веб-метод під назвою «Guru«99WebService». У цьому веб-методі ми включаємо цілочисельний параметр, який потрібно передавати щоразу, коли викликається цей веб-метод.
- Далі ми визначаємо змінну під назвою «TutorialName», яка буде містити рядкове значення «Web Services». Це значення, яке буде повернено під час виклику веб-служби.
Крок 2) Після того, як ми визначили файл веб-сервісів, наступним кроком є створення клієнтського проекту, який використовуватиме цей веб-сервіс. Давайте створимо просту консольну програму, яка викликатиме цей веб-сервіс, викличемо функцію «Guru«99WebService», а потім відобразіть результат веб-методу на екрані журналу консолі. Виконайте наведені нижче кроки, щоб створити консольну програму. Клацніть правою кнопкою миші файл рішення Visual Studio та виберіть опцію Додати->Новий проект.
Крок 3) На цьому етапі
- Обов’язково спочатку виберіть Visual C# Windows варіант. Потім виберіть варіант створення консольної програми.
- Дайте назву своєму проекту, який у нашому випадку було дано як «Демододаток».
Після натискання кнопки «ОК» на екрані вище ви зможете побачити проект у Solution Explorer у Visual Studio.
Крок 4) На цьому кроці ви налаштуєте консольну програму DemoApplication як проект запуску. Це зроблено для того, щоб ця програма запускалася першою під час запуску всього проекту Visual Studio. Ця консольна програма, у свою чергу, викличе веб-службу, яка автоматично запускатиметься Visual Studio. Щоб завершити цей крок, клацніть правою кнопкою миші на проекті DemoApplication і виберіть опцію «Встановити як проект запуску».
Крок 5) Наступний крок – додати посилання на послугу нашого «Guru«99Webservice» до нашої консольної програми. Це робиться для того, щоб DemoApplication міг посилатися на веб-сервіс та всі веб-методи у веб-сервісі. Для цього клацніть правою кнопкою миші файл проекту DemoApplication та виберіть пункт меню Додати->Посилання на сервіс.
Крок 6) На цьому кроці ми надамо різні значення, необхідні для додавання нашого посилання на послугу.
- Спочатку нам потрібно вибрати опцію пошуку. Ця опція автоматично підбере WSDL-файл для нашого веб-сервісу TutorialService.
- Далі нам слід надати назву нашому сервісному посиланню. У нашому випадку ми даємо йому назву Guru99Вебсервіс.
- Потім нам потрібно розгорнути опцію TutorialService.asmx, щоб ми могли бачити метод «GetTutorialService» праворуч. Тут TutorialService.asmx — це назва нашого файлу Visual Studio .Net, який містить код нашого веб-сервісу.
- Потім ми побачимо наш веб-метод, який був у нашому веб-сервісі під назвою «GetTutorialService».
Коли ми натискаємо кнопку «OK», весь необхідний код для доступу до цього веб-сервісу буде додано до нашої консольної програми DemoApplication, як показано нижче. На знімку екрана видно, що «Guru«99Webservice» успішно додано до нашої консольної програми.
Крок 7) Наступний крок – додати код до нашої консольної програми для доступу до веб-методу в нашому веб-сервісі. Відкрийте файл коду Program.cs, який постачається автоматично з консольною програмою, та додайте наведений нижче код.
namespace DemoApplication { class Program { static void Main(string[] args) { var client = new Guru99Webservice.Guru99WebserviceSoapClient(); Console.WriteLine(client.GetTutorialService(1)); Console.ReadKey(); } } }
Code Пояснення:
- Перша частина — вибрати файл Program.cs. Це основний файл, який створюється Visual Studio під час створення консольної програми. Цей файл виконується під час виконання консольної програми (у нашому випадку DemoApplication).
- Потім ми створюємо змінну з назвою «client», яка буде встановлена на екземпляр нашого посилання на сервіс, створеного на попередньому кроці. У нашому випадку посилання на сервіс — це 'Guru99Вебсервіс.Guru99WebserviceSoapClient()'.
- Потім ми викликаємо наш веб-метод «GetTutorialService» у веб-сервісі TutorialService. Пам’ятайте, що наш метод GetTutorialService приймає цілочисельний параметр, тому ми просто передаємо цілочисельний параметр веб-методу.
- Цей останній рядок призначений лише для того, щоб екран журналу консолі залишався активним, щоб ми могли переглядати вивід. Ця команда чекатиме на введення даних від користувача.
Вихід
Після виконання всіх вищезазначених кроків та запуску DemoApplication буде відображено наведений нижче результат.
З результату ми чітко бачимо, що DemoApplication викликає нашу веб-службу, а рядок, який повертає веб-служба, відображається в журналі консолі.
















