WSDL

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Розширення файлу: .wsdl
MIME-тип: application/wsdl+xml
Розробник: World Wide Web Consortium
Міститься у: XML
Стандарт(и): 2.0 Recommendation

Мова опису веб-сервісів - (англ. Web Services Description Language (WSDL[1])) - мова визначення інтерфейсу веб-сервісу заснована на XML, що описує функціональність веб-сервісу і спосіб доступу до нього. Акронім WSDL також використовується для будь-якого конкретного WSDL опису веб-сервісу (також званого як WSDL-файл), який забезпечує для комп'ютера опис того, як сервіс можна викликати, які параметри він очікує, і які структури даних він повертає. Таким чином, мета WSDL-файлу приблизно аналогічна визначенню метода в мові програмування.

Поточна версія WSDL - WSDL 2.0. Значення акроніма змінилося з версії 1.1, де літера "D" означала "визначення" (англ. "Definition").

Опис[ред.ред. код]

Версії 1.1 и 2.0

WSDL описує сервіси як колекції кінцевих точок мережі чи портів. Специфікація WSDL надає формат XML для документів для цієї мети. Абстрактне визначення портів і повідомлень відокремлене від їх конкретного використання та їх сутностей, що дозволяє повторне використання цих визначень. Порт визначається пов'язуючи мережеву адресу з багаторазовим зв'язуванням, а набір портів визначає сервіс. Повідомлення - це абстрактні описи даних, якими обмінюються, і типи портів - це абстрактні колекції підтримуваних операцій. Конкретні протоколи і специфікації формату даних для конкретного типу порту є багаторазовим зв'язування, де операції і повідомлення потім прив'язуються до конкретного формату мережевих протоколів і повідомлень. Таким чином, WSDL описує публічний інтерфейс для веб-служби.

WSDL часто використовується в комбінації з SOAP і XML-схеми для надання веб-сервісів через Інтернет. Клієнтська програма підключена до веб-служби може прочитати файл WSDL, щоб визначити, які операції доступні на сервері. Будь-які спеціальні типи даних, що використовуються, вбудовані в файл WSDL у вигляді XML-схеми. Потім клієнт може використовувати SOAP, щоб викликати одну з операцій, перерахованих у файлі WSDL, використовуючи, наприклад, XML через HTTP.

Поточна версія специфікації WSDL 2,0; версія 1.1 була схвалена W3C, але версія 2.0 рекомендована W3C[2]. WSDL 1.2 було перейменовано у WSDL 2.0 через його істотні відмінності від WSDL 1.1. Приймаючи зв'язування з усіма методами HTTP запиту (не тільки GET і POST, як у версії 1.1), специфікація WSDL 2.0 пропонує поліпшену підтримку веб-сервісів REST, і її набагато простіше реалізувати[3]. Однак для підтримка цієї специфікації бракує SDK для веб сервісів, які все ще пропонують інструменти тільки для WSDL 1.1. Наприклад, у версії 2.0 Business Process Execution Language (BPEL) підтримує тільки WSDL 1.1.

WSDL 1.1 термін WSDL 2.0 термін Опис
Сервіс Сервіс Містить набір системних функцій, які були виставлені на веб-протоколах.
Порт Кінцева точка Визначає адресу або точку підключення до веб-службі. Це, як правило, представлено простим рядком HTTP URL.
Binding Binding Визначає інтерфейс і стиль зв'язування SOAP (RPC / Документ) і транспорт (протокол SOAP). Секція зв'язування також визначає операції.
PortType Інтерфейс Визначає веб-служби, операції, які можуть бути виконані, а також повідомлення, які використовуються для виконання операції.
Операція Операція Визначає дії SOAP і спосіб кодування повідомлення, наприклад, "буквальні". Операція як метод або виклик функції в традиційній мові програмування.
Повідомлення Немає Як правило, повідомлення відповідає операції. Повідомлення містить інформацію, необхідну для виконання операції. Кожне повідомлення складається з одного або декількох логічних частин. Кожна частина пов'язана з атрибутом message-typing. Атрибут імені повідомлення містить унікальне ім'я серед усіх повідомлень. Атрибут part name забезпечує унікальне ім'я серед всіх частин, що обмежено повідомленням. Частини - це опис логічного змісту повідомлення. У RPC зв'язуванні, зв'язування може посилатися на ім'я частини для того, щоб вказати специфічну інформацію для зв'язування про частини. Частина може являти собою параметр в повідомленні; зв'язування визначає фактичне значення частини.

Повідомлення були видалені в WSDL 2.0, в якому типи XML-схеми для визначення тіла входів, виходів і несправностей, викликаються просто і прямо.

Тип Тип Описує дані. Мова XML схеми (також відома як XSD) використовується (вбудовано або через посилання) для цієї мети.

Підгрупа WSDL[ред.ред. код]

Підгрупа WSDL (SWSDL[4]) - це WSDL з підмножиною операцій оригінального WSDL. Розробник може використовувати підгрупу WSDL (SWSDL) для доступу до так званого підмножинного сервісу - Subset сервісу - таким чином обробляти підмножину коду веб-служби. Можна розділити веб-сервіс на частини на основі підмножини WSDL (SWSDL) для доступу до Subset сервісу. Subset сервіс підгрупи можна розділити на рівні. SWSDL використовуються для аналізу, тестування веб-служби і розробки зверху вниз. AWSCM[5] достатньо новий інструмент для успішної побудови SWSDL

Структура[ред.ред. код]

Кожний документ WSDL 1.1 можна розбити на наступні логічні частини:

  1. визначення типів даних (типи) - визначення виду відправлених і отриманих сервісом XML-повідомлень
  2. елементи даних (повідомлення) - повідомлення, що використовуються з веб-сервісом
  3. абстрактні операції (PortType) - список операцій, які можуть бути виконані з повідомленнями
  4. зв'язування сервісів (зв'язування (англ. binding)) - спосіб, яким повідомлення буде доставлено

Приклади WSDL[ред.ред. код]

Приклад 1 - WSDL 1.1[ред.ред. код]

<message name="getTermRequest">
   <part name="term" type="xs:string"/>
</message>

<message name="getTermResponse">
   <part name="value" type="xs:string"/>
</message>

<portType name="glossaryTerms">
  <operation name="getTerm">
      <input message="getTermRequest"/>
      <output message="getTermResponse"/>
  </operation>
</portType>

Приклад 2 - WSDL 2.0[ред.ред. код]

<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://www.w3.org/ns/wsdl" 
             xmlns:tns="http://www.tmsws.com/wsdl20sample" 
             xmlns:whttp="http://schemas.xmlsoap.org/wsdl/http/"
             xmlns:wsoap="http://schemas.xmlsoap.org/wsdl/soap/"
             targetNamespace="http://www.tmsws.com/wsdl20sample">

<documentation>
    This is a sample WSDL 2.0 document. 
</documentation>

<!-- Abstract type -->
   <types>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                xmlns="http://www.tmsws.com/wsdl20sample"
                targetNamespace="http://www.example.com/wsdl20sample">
                 
         <xs:element name="request"> ... </xs:element>
         <xs:element name="response"> ... </xs:element>
      </xs:schema>
   </types>

<!-- Abstract interfaces -->
   <interface name="Interface1">
      <fault name="Error1" element="tns:response"/>
      <operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">
         <input messageLabel="In" element="tns:request"/>
         <output messageLabel="Out" element="tns:response"/>
      </operation>
   </interface>

<!-- Concrete Binding Over HTTP -->
   <binding name="HttpBinding" interface="tns:Interface1" 
            type="http://www.w3.org/ns/wsdl/http">
      <operation ref="tns:Get" whttp:method="GET"/>
   </binding>
   
<!-- Concrete Binding with SOAP-->
   <binding name="SoapBinding" interface="tns:Interface1" 
            type="http://www.w3.org/ns/wsdl/soap" 
            wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
            wsoap:mepDefault="http://www.w3.org/2003/05/soap/mep/request-response">
      <operation ref="tns:Get" />
   </binding>

<!-- Web Service offering endpoints for both bindings-->
   <service name="Service1" interface="tns:Interface1">
      <endpoint name="HttpEndpoint" 
                binding="tns:HttpBinding" 
                address="http://www.example.com/rest/"/>
      <endpoint name="SoapEndpoint" 
                binding="tns:SoapBinding" 
                address="http://www.example.com/soap/"/>
   </service>
</description>

Історія[ред.ред. код]

WSDL 1.0 (у вересні 2000) був розроблений IBM, Microsoft і Ariba для опису веб-служб для їх SOAP інструментарію. Він був побудований за рахунок поєднання двох мов опису сервісів: NASSL (Network Application Service Specification Language) від IBM і SDL (Service Description Language) від Microsoft.

WSDL 1.1, опублікований в березні 2001 року, формалізація WSDL 1.0. не булу введено жодних істотних змін від 1,0 до 1,1.

WSDL 1.2 (червень 2003) був робочий проект W3C, але став WSDL 2.0. Згідно W3C: WSDL 1.2 простіший і більш гнучкий для розробників ніж в попередня версія. WSDL 1.2 намагається видалити несумісні функції, а також визначає binding HTTP 1.1 binding краще. WSDL 1.2 не підтримувався більшістю SOAP серверів та постачальників.

WSDL 2.0 став рекомендацією W3C в червні 2007 року. WSDL 1.2 був перейменований в WSDL 2.0, оскільки він мав істотні відмінності від WSDL 1.1. Зміни полягають у наступному:

  • Додана додаткова семантика до мови опису
  • Вилучені конструкції повідомлень
  • Перевантаження операторів не підтримується
  • PortType перейменовано в інтерфейс
  • Порти перейменований в кінцеві точки

WSDL-сервіс у Visual Studio використовуючи мову програмування C#[6][ред.ред. код]

Створення WSDL-сервісу за допомогою Visual Studio з використанням мови C#[ред.ред. код]

В середовищі розробки Visual Studio можна створити WSDL-сервіс, використовуючи програмний фреймворк WCF. Для створення сервісу потрібно виконати наступні дії:

Створюємо новий проект(File -> New -> Project), при створенні вибираємо темплейт WCF Web Service(Шаблони -> Visual C# -> WCF -> Застосування служби WCF. Назвемо службу Service1.

Автоматично згенерований шаблон містить дві основні частини: інтерфейс сервісу IService1.cs, та реалізацію Service1.svc, що і використовує інтерфейс

Опишемо інтерфейс методу, що буде рахувати синус числа, переданого як параметр, та реалізуємо його:

 1 //IService1.cs
 2 using System.ServiceModel;
 3 namespace Service1
 4 {
 5     [ServiceContract]
 6     public interface IService1
 7     {
 8         [OperationContract]
 9         double Sin(double value);
10     }
11 }
 1 //Service1.svc.cs
 2 using System;
 3 namespace Service1
 4 {
 5     public class Service1 : IService1
 6     {
 7         public double Sin(double x)
 8         {
 9             return Math.Sin(x);
10         }
11     }
12 }

Компілюємо проект з сервісом, запускаємо сервісу (Ctrl + F5) (ВАЖЛИВО: в Solution Explorer має бути виділеним не каталог з проектом і не файл сервісу *.svc, а файл IService1.cs). В браузері відкриється сторінка за адресою типу “http:/localhost:8133/”, до якої треба дописати “/<Назва сервісу>.svc” Тобто, "http://localhost:8133/Service1.svc" Для перегляду WSDL-файлу сервісу треба натиснути відповідне посилання.

Service1 Служба

Служба створена.

Щоб выдтестувати цю службу, нелобхідно створити клієнта і використати нього для 
виклику служби. Це можна зробити, запустивши програму svcutil.exe з командного
рядка з наступним синтаксисом:


svcutil.exe http://localhost:8133/Service1.svc?wsdl
Доступ до опису служби також можна отримати як до одного файлу:

http://localhost:8133/Service1.svc?singleWsdl
Це призведе до створення файлу конфігурації і файла кода, що має клас клієнта
Додайте ці два файла до клієнтського застосування та використайте 
згенерований клас клієнта для виклику служби.

Так буде виглядати створений WSDL файл:

<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Service1" targetNamespace="http://tempuri.org/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<xs:element name="Sin">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="value" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SinResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="SinResult" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/">
<xs:element name="anyType" nillable="true" type="xs:anyType"/>
<xs:element name="anyURI" nillable="true" type="xs:anyURI"/>
<xs:element name="base64Binary" nillable="true" type="xs:base64Binary"/>
<xs:element name="boolean" nillable="true" type="xs:boolean"/>
<xs:element name="byte" nillable="true" type="xs:byte"/>
<xs:element name="dateTime" nillable="true" type="xs:dateTime"/>
<xs:element name="decimal" nillable="true" type="xs:decimal"/>
<xs:element name="double" nillable="true" type="xs:double"/>
<xs:element name="float" nillable="true" type="xs:float"/>
<xs:element name="int" nillable="true" type="xs:int"/>
<xs:element name="long" nillable="true" type="xs:long"/>
<xs:element name="QName" nillable="true" type="xs:QName"/>
<xs:element name="short" nillable="true" type="xs:short"/>
<xs:element name="string" nillable="true" type="xs:string"/>
<xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte"/>
<xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt"/>
<xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong"/>
<xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort"/>
<xs:element name="char" nillable="true" type="tns:char"/>
<xs:simpleType name="char">
<xs:restriction base="xs:int"/>
</xs:simpleType>
<xs:element name="duration" nillable="true" type="tns:duration"/>
<xs:simpleType name="duration">
<xs:restriction base="xs:duration">
<xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?"/>
<xs:minInclusive value="-P10675199DT2H48M5.4775808S"/>
<xs:maxInclusive value="P10675199DT2H48M5.4775807S"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="guid" nillable="true" type="tns:guid"/>
<xs:simpleType name="guid">
<xs:restriction base="xs:string">
<xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/>
</xs:restriction>
</xs:simpleType>
<xs:attribute name="FactoryType" type="xs:QName"/>
<xs:attribute name="Id" type="xs:ID"/>
<xs:attribute name="Ref" type="xs:IDREF"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="IService1_Sin_InputMessage">
<wsdl:part name="parameters" element="tns:Sin"/>
</wsdl:message>
<wsdl:message name="IService1_Sin_OutputMessage">
<wsdl:part name="parameters" element="tns:SinResponse"/>
</wsdl:message>
<wsdl:portType name="IService1">
<wsdl:operation name="Sin">
<wsdl:input wsaw:Action="http://tempuri.org/IService1/Sin" message="tns:IService1_Sin_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IService1/SinResponse" message="tns:IService1_Sin_OutputMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="BasicHttpBinding_IService1" type="tns:IService1">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Sin">
<soap:operation soapAction="http://tempuri.org/IService1/Sin" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="Service1">
<wsdl:port name="BasicHttpBinding_IService1" binding="tns:BasicHttpBinding_IService1">
<soap:address location="http://localhost:8133/Service1.svc"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

Використання віддаленого WSDL-сервісу[ред.ред. код]

  1. Для використання сервісу використовується посилання на сторінку з його WSDL-описом. Для цього:
  2. Створюємо проект довільного типу (Console, WinForms, etc.).
  3. Клікаємо правою кнопкою миші на каталог References, вибираємо Add Service Reference
  4. Вставляємо в поле Adress посилання на WSDL-файл нашого сервісу, наприклад, http://localhost:8008/Service1.svc?singleWsdl, вибираємо простір імен, натискаємо Go -> OK
  5. Підключаємо вказаний простір імен в коді, та використовуємо клієнт створеного сервісу
    1 using System;
    2 ....
    3 using (MyService.Service1Client client = new MyService.Service1Client())
    4     {
    5         ......
    6     }
    

Дивитися також[ред.ред. код]

Посилання[ред.ред. код]

  1. Web Services Description Language. Wikipedia (en). 2016-11-03. Процитовано 2016-12-25. 
  2. Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language. www.w3.org. Процитовано 2016-12-25. 
  3. Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts. www.w3.org. Процитовано 2016-12-25. 
  4. Chaturvedi, A. (2014-12-01). Automated Web Service Change Management AWSCM - A Tool. 2014 IEEE 6th International Conference on Cloud Computing Technology and Science. с. 715–718. doi:10.1109/CloudCom.2014.144. Процитовано 2016-12-25. 
  5. Chaturvedi, A. (2014-12-01). Automated Web Service Change Management AWSCM - A Tool. 2014 IEEE 6th International Conference on Cloud Computing Technology and Science. с. 715–718. doi:10.1109/CloudCom.2014.144. Процитовано 2016-12-25. 
  6. Windows Communication Foundation. msdn.microsoft.com. Процитовано 2016-12-25. 


Зовнішні посилання[ред.ред. код]