WSDL là gì? Ý nghĩa và ví dụ.
⚡ Tóm tắt thông minh
WSDL (Dịch vụ web DescriptWSDL (Ngôn ngữ ion) là một tệp dựa trên XML cho ứng dụng khách biết dịch vụ web làm gì và cách gọi nó. Tài liệu này giải thích cấu trúc WSDL, các phần tử, thông báo, loại cổng, liên kết và một ví dụ về xuất bản.
WSDL là gì?
Dịch vụ website Descriptngôn ngữ ion (WSDL) là một tệp dựa trên XML về cơ bản cho ứng dụng khách biết dịch vụ web làm gì. Tệp WSDL được sử dụng để mô tả ngắn gọn những gì dịch vụ web thực hiện và cung cấp cho khách hàng tất cả thông tin cần thiết để kết nối với dịch vụ web và sử dụng tất cả chức năng do dịch vụ web cung cấp.
Trong hướng dẫn này, chúng ta sẽ tập trung vào phần quan trọng nhất của dịch vụ web, đó là WSDL, hay còn gọi là Dịch vụ Web. DescriptNgôn ngữ ion. Nó đóng vai trò như ngôn ngữ giao tiếp.tract nằm giữa dịch vụ web và bất kỳ máy khách nào muốn sử dụng nó.
Cấu trúc của tài liệu WSDL
Tài liệu WSDL được sử dụng để mô tả một dịch vụ web. Mô tả này là cần thiết để các ứng dụng khách có thể hiểu được dịch vụ web thực sự làm gì.
- Tệp WSDL chứa vị trí của dịch vụ web, và
- Các phương thức được dịch vụ web đưa ra.
Tệp WSDL có thể trông rất phức tạp đối với người dùng, nhưng nó chứa tất cả thông tin cần thiết mà bất kỳ ứng dụng khách nào cũng cần để sử dụng dịch vụ web liên quan. Dưới đây là cấu trúc chung của một tệp WSDL:
- Định nghĩa
- TargetKhông gian tên
- Loại dữ liệu
- Tin nhắn
- Loại cổng
- Bindings
- Dịch vụ
Một điểm quan trọng cần lưu ý ở đây là định nghĩa về thông điệp, tức là những gì được truyền đi bởi... Giao thức SOAPThực tế, nó được định nghĩa trong tài liệu WSDL. Tài liệu WSDL cho ứng dụng khách biết các loại thông điệp SOAP nào được gửi và chấp nhận bởi dịch vụ web.
Nói cách khác, WSDL giống như một tấm bưu thiếp ghi địa chỉ của một địa điểm cụ thể. Địa chỉ cung cấp thông tin chi tiết về nơi cần gửi thông điệp. Do đó, cũng tương tự như vậy, tệp WSDL là tấm bưu thiếp chứa địa chỉ của dịch vụ web có thể cung cấp tất cả các chức năng mà khách hàng mong muốn.
<!-- 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>
Dưới đây là sơ đồ cấu trúc của một tập tin WSDL.
Cấu trúc của WSDL
Các phần tử WSDL
Tệp WSDL bao gồm các phần chính sau:
- Thẻ `<complex>` được sử dụng để định nghĩa tất cả các kiểu dữ liệu phức tạp sẽ được sử dụng trong thông điệp trao đổi giữa ứng dụng khách và dịch vụ web. Điều này rất quan trọng vì nếu dịch vụ web làm việc với một kiểu dữ liệu phức tạp, thì ứng dụng khách cần phải biết cách xử lý nó. Các kiểu dữ liệu như số thực, số nguyên và chuỗi đều là các kiểu dữ liệu đơn giản, nhưng dịch vụ web cũng có thể cung cấp các kiểu dữ liệu có cấu trúc. Ví dụ, có thể có một kiểu dữ liệu gọi là EmployeeDataType có thể có 2 phần tử gọi là “EmployeeName” thuộc kiểu chuỗi và “EmployeeID” thuộc kiểu số nguyên. Cả hai kết hợp với nhau tạo thành một kiểu dữ liệu phức tạp.
- Thẻ này được sử dụng để định nghĩa thông điệp được trao đổi giữa ứng dụng khách và máy chủ web. Những thông điệp này giải thích các thao tác đầu vào và đầu ra mà dịch vụ web có thể thực hiện. Ví dụ, một thông điệp có thể chấp nhận ID nhân viên và thông điệp đầu ra có thể là tên của nhân viên dựa trên ID nhân viên được cung cấp.
- thẻ được sử dụng để gói gọn mọi thông báo đầu vào và đầu ra thành một thao tác logic. Vì vậy, có thể có một thao tác được gọi là “GetEmployee” kết hợp thông báo đầu vào về việc chấp nhận ID nhân viên từ ứng dụng khách và sau đó gửi Tên nhân viên làm thông báo đầu ra.
- Thẻ (tag) được sử dụng để liên kết thao tác với một loại cổng cụ thể. Điều này đảm bảo khi ứng dụng khách gọi đến loại cổng tương ứng, nó sẽ có thể truy cập các thao tác được liên kết với cổng đó. Loại cổng cũng giống như giao diện. Vì vậy, nếu một ứng dụng khách cần sử dụng dịch vụ web, nó cần sử dụng thông tin liên kết để đảm bảo rằng nó có thể kết nối với giao diện do dịch vụ web đó cung cấp.
- Thẻ (tag) là tên được đặt cho chính dịch vụ web. Ban đầu, khi một ứng dụng khách gọi đến dịch vụ web, nó sẽ gọi bằng tên của dịch vụ web đó. Ví dụ, một dịch vụ web có thể được đặt tại địa chỉ như http://localhost/Guru99/Tutorial.asmx. Thẻ dịch vụ sẽ có URL được định nghĩa, cho ứng dụng khách biết rằng dịch vụ web có sẵn tại vị trí này.
Tại sao WSDL
Dịch vụ web là một thành phần quan trọng trong việc xây dựng các ứng dụng web hiện đại. Mục đích chính của chúng là cho phép nhiều ứng dụng được xây dựng trên các ngôn ngữ lập trình khác nhau giao tiếp với nhau. Ví dụ, chúng ta có thể có một ứng dụng web .Net giao tiếp với một dịch vụ web khác. Java ứng dụng thông qua dịch vụ Web.
Một dịch vụ web có các đặc điểm chính sau:
- Nó được xây dựng bằng ngôn ngữ lập trình XML. Hầu hết các công nghệ hiện đại như .Net và Java có các lệnh tương ứng có khả năng làm việc với XML. Do đó, XML được coi là ngôn ngữ thích hợp nhất để xây dựng các dịch vụ web.
- Các dịch vụ web giao tiếp với nhau thông qua giao thức HTTP. HTTP là một giao thức được sử dụng bởi tất cả các ứng dụng dựa trên web. Do đó, việc đảm bảo các dịch vụ web cũng có khả năng hoạt động trên giao thức HTTP là điều hợp lý.
- Các dịch vụ web tuân theo một đặc tả ngôn ngữ cụ thể. Thông số kỹ thuật này được thiết lập bởi W3C, cơ quan quản lý tất cả các tiêu chuẩn web.
- Các dịch vụ web có ngôn ngữ mô tả được gọi là WSDL, được sử dụng để mô tả dịch vụ web.
Tệp WSDL được viết bằng XML thông thường. Lý do nó được viết bằng XML là để bất kỳ ngôn ngữ lập trình nào cũng có thể đọc được tệp này. Vì vậy, nếu ứng dụng khách được viết bằng .Net, nó sẽ hiểu được tệp XML. Tương tự, nếu ứng dụng khách được viết bằng... Java Nếu đó là ngôn ngữ lập trình, thì nó cũng có thể diễn giải được tệp WSDL.
Tệp WSDL là thứ liên kết mọi thứ lại với nhau. Từ sơ đồ trên, bạn có thể thấy rằng bạn có thể tạo một dịch vụ web bằng ngôn ngữ .Net. Vì vậy, đây là nơi dịch vụ được triển khai. Nếu bạn không có tệp WSDL và muốn có một dịch vụ web khác... Java Để sử dụng lớp để tiêu thụ dịch vụ web, bạn sẽ cần rất nhiều công sức lập trình. Nhưng giờ đây, với tệp WSDL, được viết bằng XML và có thể được hiểu bởi bất kỳ ngôn ngữ lập trình nào, bạn có thể dễ dàng có được một lớp để thực hiện điều đó. Java lớp sử dụng dịch vụ web .Net. Do đó, số lượng nỗ lực mã hóa giảm đi rất nhiều.
Phần thông báo WSDL
WSDL bao gồm một phần được gọi là “thông báo” được biểu thị bằng Phần tử này về cơ bản được sử dụng để mô tả dữ liệu được trao đổi giữa dịch vụ web và ứng dụng khách.
Mỗi dịch vụ web sẽ luôn có 2 loại thông báo:
- Một cái dành cho đầu vào của dịch vụ web và cái còn lại dành cho đầu ra của dịch vụ web.
- Đầu vào được sử dụng để mô tả các tham số được dịch vụ web chấp nhận. Đây là một khía cạnh quan trọng của ứng dụng khách để nó biết các giá trị được gửi dưới dạng tham số cho dịch vụ web.
- Loại thông báo khác là thông báo đầu ra cho biết dịch vụ web cung cấp kết quả gì.
Lần lượt, mỗi tin nhắn sẽ có một phần tử được sử dụng để mô tả tham số được sử dụng bởi thông báo đầu vào và đầu ra.
Dưới đây là một ví dụ đơn giản về cấu trúc thông báo cho một dịch vụ web. Chức năng của dịch vụ web là cung cấp tên của một "Bài hướng dẫn" khi "ID Bài hướng dẫn" được gửi làm tham số cho dịch vụ web.
- Như chúng ta thấy, dịch vụ web có 2 thông điệp, một dành cho đầu vào và một dành cho đầu ra.
- Thông báo đầu vào được gọi là TutorialNameRequest, có một tham số tên là TutorialID. Tham số này thuộc kiểu số, được chỉ định bởi kiểu xsd:number.
- Thông báo đầu ra được gọi là TutorialNameResponse, có một tham số tên là TutorialName. Tham số này có kiểu dữ liệu chuỗi, được chỉ định bởi kiểu xsd:string.
Ràng buộc loại cổng
Trong WSDL, các cổng được sử dụng để định nghĩa một thao tác hoàn chỉnh được cung cấp bởi dịch vụ web. Trong chủ đề trước, chúng ta đã thấy rằng dịch vụ web của chúng ta cung cấp 2 thông báo, một cho đầu vào có tên là “TutorialNameRequest” và một cho đầu ra có tên là “TutorialNameResponse”. Cả hai thông báo đầu vào và đầu ra cùng nhau tạo thành một thao tác hoàn chỉnh.
WSDL cung cấp một phần tử được gọi là được sử dụng để xác định các hoạt động được cung cấp bởi dịch vụ Web.
Vì vậy, trong ví dụ trên, chúng ta có thể lưu ý những điều sau:
- Tên của loại cổng bao bọc thao tác này được đặt là “Tutorial_PortType”.
- Bản thân thao tác được đặt tên là “Tutorial”. Vì vậy, về cơ bản thao tác của chúng ta cung cấp một TutorialName nếu TutorialID được cung cấp làm tham số đầu vào.
- Tiếp theo là 2 thông điệp của chúng ta, một cho đầu vào và một cho đầu ra, tạo thành hoạt động của chúng ta.
Ngoài các phần tử, ngoài ra còn có phần tử được sử dụng để xác định cách truyền tin nhắn.
- Ví dụ trên cho thấy rằng liên kết bao gồm một tên liên kết, trong trường hợp này được đặt là “TutorialSoapBinding”. Nói một cách đơn giản, liên kết là thông tin mà ứng dụng khách sử dụng để thực sự liên kết với dịch vụ web. Sau khi được liên kết với dịch vụ web, nó sẽ có khả năng gọi các thao tác khác nhau được dịch vụ web cung cấp.
- Lớp vận chuyển được chỉ định là http://, có nghĩa là các thông điệp sẽ được truyền tải qua giao thức HTTP.
Tạo tệp WSDL
Tệp WSDL được tạo ra mỗi khi một dịch vụ web được xây dựng bằng bất kỳ ngôn ngữ lập trình nào. Vì tệp WSDL khá phức tạp để tạo ra từ đầu, nên tất cả các trình soạn thảo như Visual Studio for .Net và Eclipse cho Java tự động tạo tệp WSDL.
Dưới đây là ví dụ về tệp WSDL được tạo trong 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>
Tệp WSDL ở trên trông khá khó hiểu đối với bất kỳ người dùng nào. Chúng ta sẽ đi sâu vào chi tiết các phần khác nhau trong các bài hướng dẫn tiếp theo, nhưng hiện tại, hãy cùng xem qua chức năng thực sự của từng phần trong tệp WSDL.
Xuất bản ví dụ về dịch vụ web
Bây giờ chúng ta hãy xem một ví dụ về cách chúng ta có thể xuất bản và sử dụng một dịch vụ web bằng Visual Studio. Trong ví dụ này, chúng ta sẽ tạo một dịch vụ web với một WebMethod. Phương thức này sẽ chấp nhận một tham số kiểu Integer có tên là “TutorialID”. Sau đó, WebMethod sẽ trả về một chuỗi có tên là “Web Services”.
Tiếp theo, chúng ta sẽ tạo một ứng dụng dựa trên giao diện dòng lệnh, ứng dụng này sẽ sử dụng dịch vụ web và gọi phương thức web của chúng ta một cách phù hợp. Hãy cùng xem các bước cần thiết để thực hiện ví dụ này.
Bước 1) Bước đầu tiên là tạo dịch vụ web của bạn. Các bước chi tiết về cách thực hiện Asp.Net Dự án web và dịch vụ web được tạo ra đã được giải thích. đâyVui lòng làm theo các bước tương tự để tạo dự án và dịch vụ web. Phần quan trọng là nhập đoạn mã bên dưới vào tệp dịch vụ web.
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 Giải thích:
- Ở đây chúng ta đang tạo một WebMethod có tên là “Guru99WebService.” Trong phương thức web này, chúng ta bao gồm một tham số kiểu số nguyên cần được truyền vào mỗi khi phương thức web này được gọi.
- Tiếp theo, chúng ta xác định một biến có tên “TutorialName” sẽ chứa giá trị chuỗi của “Dịch vụ web”. Đây là giá trị sẽ được trả về khi dịch vụ web được gọi.
Bước 2) Sau khi đã định nghĩa tệp dịch vụ web, bước tiếp theo là tạo một dự án máy khách sẽ sử dụng dịch vụ web này. Chúng ta hãy tạo một ứng dụng console đơn giản sẽ gọi dịch vụ web này, thực thi “GuruNhập "99WebService" và sau đó hiển thị kết quả của phương thức web trên màn hình nhật ký console. Thực hiện các bước sau để tạo ứng dụng console: Nhấp chuột phải vào tệp giải pháp Visual Studio và chọn tùy chọn Thêm -> Dự án mới.
Bước 3) Trong bước này,
- Đảm bảo trước tiên chọn Visual C# Windows lựa chọn. Sau đó chọn tùy chọn tạo ứng dụng bảng điều khiển.
- Đặt tên cho dự án của bạn, trong trường hợp của chúng tôi được đặt là “DemoApplication”.
Sau khi bạn nhấn nút OK trên màn hình phía trên, bạn sẽ có thể thấy dự án trong Solution Explorer của Visual Studio.
Bước 4) Ở bước này, bạn sẽ thiết lập ứng dụng DemoApplication Console làm dự án khởi động. Điều này nhằm đảm bảo ứng dụng này được khởi chạy đầu tiên khi toàn bộ dự án Visual Studio được chạy. Ứng dụng Console này sẽ gọi dịch vụ web, dịch vụ này sẽ được Visual Studio tự động khởi chạy. Để hoàn thành bước này, hãy nhấp chuột phải vào dự án DemoApplication và chọn tùy chọn “Đặt làm dự án khởi động”.
Bước 5) Bước tiếp theo là thêm mã tham chiếu dịch vụ của chúng tôi “GuruThêm "99Webservice" vào ứng dụng console của chúng ta. Điều này được thực hiện để DemoApplication có thể tham chiếu đến dịch vụ web và tất cả các phương thức web trong dịch vụ web đó. Để làm điều này, hãy nhấp chuột phải vào tệp dự án DemoApplication và chọn tùy chọn menu Thêm -> Tham chiếu dịch vụ.
Bước 6) Ở bước này, chúng ta sẽ cung cấp các giá trị khác nhau cần thiết để thêm mã tham chiếu dịch vụ của mình.
- Đầu tiên, chúng ta cần chọn tùy chọn tìm kiếm. Tùy chọn này sẽ tự động chọn tệp WSDL cho dịch vụ web TutorialService của chúng ta.
- Tiếp theo, chúng ta nên đặt tên cho mã tham chiếu dịch vụ của mình. Trong trường hợp này, chúng ta sẽ đặt tên là... Guru99Dịch vụ web.
- Tiếp theo, chúng ta cần mở rộng tùy chọn TutorialService.asmx để có thể thấy phương thức “GetTutorialService” ở phía bên phải. Ở đây, TutorialService.asmx là tên của tệp .Net trong Visual Studio chứa mã cho dịch vụ web của chúng ta.
- Tiếp theo, chúng ta sẽ xem phương thức Web mà chúng ta đã có trong dịch vụ web của mình, được gọi là “GetTutorialService”.
Khi chúng ta nhấp vào nút “OK”, tất cả mã cần thiết để truy cập dịch vụ web này sẽ được thêm vào ứng dụng DemoApplication Console của chúng ta như hình bên dưới. Ảnh chụp màn hình cho thấy rằng “Guru"99Webservice" đã được thêm thành công vào ứng dụng console của chúng tôi.
Bước 7) Bước tiếp theo là thêm mã vào ứng dụng console của chúng ta để truy cập phương thức web trong dịch vụ web. Mở tệp mã Program.cs có sẵn cùng với ứng dụng console và thêm đoạn mã bên dưới.
namespace DemoApplication { class Program { static void Main(string[] args) { var client = new Guru99Webservice.Guru99WebserviceSoapClient(); Console.WriteLine(client.GetTutorialService(1)); Console.ReadKey(); } } }
Code Giải thích:
- Bước đầu tiên là chọn tệp Program.cs. Đây là tệp chính được Visual Studio tạo ra khi một ứng dụng console được tạo. Tệp này sẽ được thực thi khi ứng dụng console (trong trường hợp của chúng ta là DemoApplication) được chạy.
- Tiếp theo, chúng ta tạo một biến có tên là “client”, biến này sẽ được gán cho một thể hiện của tham chiếu Dịch vụ mà chúng ta đã tạo ở bước trước đó. Trong trường hợp của chúng ta, tham chiếu dịch vụ là 'Guru99Dịch vụ web.Guru99WebserviceSoapClient()'.
- Sau đó, chúng ta gọi phương thức Web 'GetTutorialService' trong dịch vụ web TutorialService. Hãy nhớ rằng phương thức GetTutorialService của chúng ta chấp nhận một tham số kiểu số nguyên, vì vậy chúng ta chỉ cần truyền một tham số kiểu số nguyên cho phương thức web.
- Dòng lệnh cuối cùng này chỉ để đảm bảo màn hình nhật ký console vẫn hoạt động để chúng ta có thể xem kết quả. Lệnh này sẽ chờ người dùng nhập liệu.
Đầu ra
Khi thực hiện đầy đủ các bước trên và chạy ứng dụng DemoApplication, kết quả hiển thị sẽ như bên dưới.
Từ đầu ra, chúng ta có thể thấy rõ rằng DemoApplication gọi dịch vụ Web của chúng ta và chuỗi được dịch vụ Web trả về được hiển thị trong nhật ký Console của chúng ta.
















