WSDL là gì

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>

Advertisements
Standard

8 lý do sử dụng Stored Procedures

Sử dụng Stored Procedures có các lợi thế sau đây:

1. Sử dụng các cấu trúc lệnh linh hoạt

Stored Procedures cho phép lập trình viên truyền tham số và trả về kết quả linh hoạt, sử dụng các cấu trúc lệnh phức tạp như định nghĩa tên biến, các cấu trúc lệnh điều kiện IF THEN…

2. Stored Procedures được biên dịch trước

Ngay sau khi được tạo, hệ thống biên dịch nó do đó khi sử dụng nó trả về kết quả nhanh hơn.

3. Giảm chi phí phát triển do tái sử dụng và tăng tính ổn định

Chúng ta có thể tái sử dụng các Stored Procedures do đó giảm được công việc của lập trình viên. Hơn nữa, việc tập trung vào thành các procedures giúp công tác kiểm tra và khắc phục lỗi dễ dàng hơn, tăng tính ổn định của hệ thống.

4. Giảm lưu lượng mạng trao đổi giữa máy chủ ứng dụng và máy chủ dữ liệu

Thay vì lấy kết quả về xử lý phía máy chủ ứng dụng sau đó lại gọi truy xuất dữ liệu từ máy chủ dữ liệu nhiều lần, sử dụng các Stored Procedures giúp việc trao đổi dữ liệu giữa máy chủ ứng dụng và máy chủ dữ liệu giảm còn 1 lần truyền tham số và 1 lần trả kết quả. Việc này cải thiện tốc độ hệ thống.

6. Dễ dàng khắc phục lỗi

Dễ dàng kiểm tra tìm lỗi khi sử dụng Stored Procedures.

Bằng cách truyền vào các tham số kiểm tra chúng ta có thể khẳng định Stored Procedures chạy chính xác hay không.

Ví dụ chạy thử Stored Procedures:

Store_Name [Param1],[Param2],[…]

7. An toàn

Các Stored Procedures có thể được mã hóa và/hoặc phân quyền để đảm bảo quyền sử dụng được cấp cho đúng đối tượng người dùng.

8. Tập trung hóa công tác an ninh, quản trị và vận hành

 

Standard

Tối ưu hóa câu lệnh SQL

1. Sử dụng lệnh UNION ALL thay cho lệnh UNION bất cứ khi nào có thể

Lệnh UNION ALL chạy nhanh hơn lệnh UNION vì nó không kiểm tra các bản ghi trùng lặp, trong khi đó lệnh UNION luôn luôn kiểm tra các bản ghi xem có trùng lặp hay không.

2. Sử dụng thêm lệnh SET NOCOUNT ON trong các stored procedures

Thông thường T-SQL sẽ thông báo tổng số các bản ghi bị tác động khi thực thi một lệnh SQL. Tuy nhiên, nếu chúng ta sử dụng lệnh SET NOCOUNT ON ở đầu các stored procedures thì hệ thống không trả về thông báo nữa. Việc này tiết kiệm lưu lượng mạng chút xíu.

3. Hạn chế hết mức việc sử dụng mệnh đề DISTINCT

Mệnh đề DISTINCT làm chậm hệ thống đi trông thấy. Hãy hạn chế sử dụng

4. Hạn chế sử dụng các trigger, thay bằng các constraints khi có thể

Sử dụng constraints hiệu quả hơn các triggers

5. Sử dụng SYSINDEXES để lấy số bản ghi

Hầu hết chúng ta sử dụng lệnh COUNT(*) để lấy số bản ghi, tuy nhiên bảng sysindexes lưu trữ tổng số bản ghi của tất cả các bảng dữ liệu người dùng do vậy chúng ta có thể lấy từ bảng này thay vì dùng lệnh COUNT(*). Ngoài ra còn có một số cách khác nữa.

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name')

6. Sử dụng VIEW và Stored Procedure  thay cho các câu lệnh truy vấn phức tạp

7. Sử dụng giải mã nếu có thể

Để tránh phải duyệt một bản ghi nhiều lần, DECODE có thể được sử dụng trong các câu lệnh GROUP BY và ORDER BY.

Ví dụ:

SELECT id FROM employee 
WHERE name LIKE 'Arun%' 
and location = 'USA';

Thay vì

SELECT DECODE(location,'USA',id,NULL) id FROM employee 
WHERE name LIKE 'Arun%';

 

8. Giảm thiểu các sub query

SELECT name FROM employee WHERE (sal, experience) = (SELECT MAX (sal), MAX (experience) FROM employee_details) AND dept = 'Accounts';

9. Chỉ nên so sánh các loại giá trị cùng kiểu

So sánh cùng kiểu giúp hệ thống không phải chuyển kiểu do đó cải thiện tốc độ

Ví dụ:

ON DECIMAL(A.INTCOL, 7, 0) = B.DECICOL

ON A.INTCOL = INTEGER(B.DECICOL)

10. Chỉ trả về các cột dữ liệu cần thiết

Trả về toàn bộ dữ liệu sẽ làm tăng dung lượng mạng. Do vậy hãy hạn chế nếu có thể

Standard