Technotransfer

WSDL – viết tắt của Web Services Description Language – dùng để mô tả các thông tin cần thiết của một web service. Nó được tổ chức thành 1 file có cấu trúc được thống nhất, không phân biệt ngôn ngữ sử dụng.

Web service giúp một ứng dụng web có thể cung cấp dịch vụ cho một ứng dụng khác (nên gọi là dịch vụ web hay web service). Ví dụ bạn xây dựng một website muốn lấy dữ liệu giao dịch chứng khoán của sàn giao dịch chứng khoán HCM. Sở giao dịch chứng khoán HCM xây dựng web service để bạn lấy số liệu đó liên tục bất kỳ lúc nào.

Với phương thức này, một ứng dụng sử dụng xây dựng trên nền tảng asp.net có thể cung cấp dịch vụ cho một ứng dụng khác viết trên nền tảng PHP hoặc ngược lại.

WSDL là gì?

• WSDL là một file định dạng XML• WSDL là “communication gateway” giữa ứng dụng cung cấp (web service provider) và ứng dụng sử dụng (web service consumer)

• Web service consumer đọc file WSDL để biết được web service cung cấp những hàm ứng dụng nào, có cấu trúc ra sao, sử dụng ra sao.

• WSDL được giới thiệu bởi W3C

Các thành phần của file WSDL:

Sau đây là các thành phần quan trọng của 1 file WSDL:

• Message – Định nghĩa về bản tin được giao tiếp giữa consumer và provider. Cấu trúc:

<message name=’getItemCountRequest’>

<part name=’upc’ type=’xsd:string’/>

</message>

<message name=’getItemCountResponse’>

<part name=’Result’ type=’xsd:integer’/>

</message>

• Operation – Định nghĩa các action được web service hỗ trợ. Cơ bản mà nói thì nó cho chúng ta biết đầu vào đầu ra của các hàm / action:

<operation name=’getItemCount’>

<input message=’tns:getItemCountRequest’/>

<output message=’tns:getItemCountResponse’/>

</operation>

• Port Type – It describes a web service; operations that can be performed, and messages that are involved in WS.

<portType name=’InventoryPortType’>

<operation name=’getItemCount’>

<input message=’tns:getItemCountRequest’/>

<output message=’tns:getItemCountResponse’/>

</operation>

</portType>

• Binding – Communication protocol which is used by web service.

<binding name=’InventoryBinding’ type=’tns:InventoryPortType’>

<soap:binding style=’rpc’

transport=’http://schemas.xmlsoap.org/soap/http’/&gt;

<operation name=’getItemCount’>

<soap:operation soapAction=’urn:xmethods-delayed-quotes#getItemCount’/>

<input>

<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’

encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;

</input>

<output>

<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’

encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;

</output>

</operation>

</binding>

• Port – A single endpoint defined as a combination of a binding and a network address.

<port name=’InventoryPort’ binding=’InventoryBinding’>

<soap:address location=’http://localhost/soap/server/server.php’/&gt;

</port>

• Service – A collection of related endpoints. it will show which file/path is located for this WSDL file.

<service name=’InventoryService’>

<port name=’InventoryPort’ binding=’InventoryBinding’>

<soap:address location=’http://localhost/soap/server/server.php’/&gt;

</port>

</service>

If you will merge all. File will be look like this

<?xml version=’1.0′ encoding=’UTF-8′ ?>

<definitions name=’Inventory’

targetNamespace=’urn:test’

xmlns:tns=’urn:test’

xmlns:soap=’http://schemas.xmlsoap.org/wsdl/soap/’

xmlns:xsd=’http://www.w3.org/2001/XMLSchema’

xmlns:soapenc=’http://schemas.xmlsoap.org/soap/encoding/’

xmlns:wsdl=’http://schemas.xmlsoap.org/wsdl/’

xmlns=’http://schemas.xmlsoap.org/wsdl/’&gt;

<message name=’getItemCountRequest’>

<part name=’upc’ type=’xsd:string’/>

</message>

<message name=’getItemCountResponse’>

<part name=’Result’ type=’xsd:integer’/>

</message>

<portType name=’InventoryPortType’>

<operation name=’getItemCount’>

<input message=’tns:getItemCountRequest’/>

<output message=’tns:getItemCountResponse’/>

</operation>

</portType>

<binding name=’InventoryBinding’ type=’tns:InventoryPortType’>

<soap:binding style=’rpc’

transport=’http://schemas.xmlsoap.org/soap/http’/&gt;

<operation name=’getItemCount’>

<soap:operation soapAction=’urn:xmethods-delayed-quotes#getItemCount’/>

<input>

<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’

encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;

</input>

<output>

<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’

encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/&gt;

</output>

</operation>

</binding>

<service name=’InventoryService’>

<port name=’InventoryPort’ binding=’InventoryBinding’>

<soap:address location=’http://localhost/soap/server/server.php’/&gt;

</port>

</service>

</definitions>