CácdịchvụWeb Gvhd: Nguyễn Tấn Trần Minh Khang 192 Chương 16 CácdịchvụWeb Hiện nay, vẫn còn một số hạn chế lớn trong các ứng dụng Web. Người dùng bị giới hạn chỉ thực hiện được những nội dung đã được cấu trúc cho một trang cụ thể và xem dữ liệu thông qua một số giao diện cụ thể nào đó đã được thiết kế trên máy chủ. Do đó người dùng muốn lấy được thông tin được linh động và hiệu quả hơn. Hơn nữa, thay vì ta hiển thị thông tin thông qua trình duyệt Web, ta muốn chạy một phần mềm trực tiếp trên máy khách mà có thể trao đổi dữ liệu trên máy chủ tuỳ ý. Công nghệ .NET cho phép xây dụng cách dịchvụWeb ( Web Services ) đáp ứng được các yêu cầu trên. Ý tưởng chính là : thay vì liệt kê các thông tin theo dạng HTML, trang tạo sẵn một loạt các lệnh gọi hàm. Các lệnh gọi hàm này có thể trao đổi thông tin qua lại giữa các hệ cơ sở dữ liệu trên máy chủ. Các hàm này có thể chấp nhận các tham số và có thể trả về một giá trị tùy ý. Các dịchvụWeb vẫn dựa trên giao thức HTTP để truyền dữ liệu, đồng thời nó cần phải sử dụng thêm một loại giao thức để phục vụ cho việc gọi hàm. Hiện nay có hai giao thức được dùng chủ yếu là : SOAP ( Simple Object Access Protocol ) và SDL ( Service Description Language, đây là giao thức riêng của Microsoft ). Cả hai giao thức này đều được xây dụng dựa trên XML, mục đích chung của chúng là giúp định nghĩa các lệnh gọi hàm, tham số và giá trị. Ngoài ra, Microsoft cũng đưa ra thêm một ý tưởng mới về tập tin Discovery File, có phần mở rộng là .disco. Tập tin dạng này dùng để cung cấp các thông tin cho các trình duyệt để các trình duyệt này có thể xác định được các trang trên các máy chủ mà có chứa các dịchvụ Web. Sau đây, ta sẽ tìm hiểu một ví dụ nhằm minh họa việc tạo ra một dịchvụ Web, đóng vai trò là một thư viện chứa một tập các hàm tiện ích. Trang Web của chúng ta sẽ sử dụng các hàm của dịchvụ này. DịchvụWeb của chúng sẽ có tên MathService , đơn giản là định nghĩa bốn phương thức cộng, trừ, nhân, chia trên hai số thực bất kỳ. Mỗi phương thức đều nhận vào hai đối số kiểu số thực và trả về kết quả cũng có kiểu số thực. Đầu tiên ta cần tạo một dự án kiểu Web Service bằng cách chọn : New Project\Visual C# Project\ASP.NET Web Service và đặt tên cho dự án là MathService và đổi tên dịchvụ thành MathService.asmx. NET có tạo sẵn cho chúng ta một số tập tin như : • Service1.asmx : được trình duyệt yêu cầu, tương tự với tập tin .aspx. • WebService1.cs: trang chứa mã C# quản lý. • DiscoFile1.disco : tập tin khám phá. Các dịchvụWeb Gvhd: Nguyễn Tấn Trần Minh Khang 193 Trong ví dụ này, chúng ta sẽ tạo ra một Web Form mới và thiết giao diện như sau : Web Form sẽ gọi thực thi các hàm của dịchvụ Web. Dự án của ta sẽ thừa kế namespace là System.Web.Services.WebService, nơi chứa các thuộc tính và phương thức cần thiết để tạo dịchvụ Web. public class MathService : System.Web.Services.WebService Trên mỗi phương thức ta cần khai báo thuộc tính [WebMethod] , để chỉ ra đây là phương thức sẽ được sử dụng cho dịchvụ Web. Mã của tập tin dịchvụ sẽ như sau : using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; namespace MathService { public class MathService :System.Web.Services.WebService { public MathService() { InitializeComponent(); } #region Component Designer generated code private IContainer components = null; private void InitializeComponent() { } protected override void Dispose( bool disposing ) Các dịchvụWeb Gvhd: Nguyễn Tấn Trần Minh Khang 194 { if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); } #endregion //4 hàm toán học của dịchvụ Web, trên mỗi phương thức //ta cần khai báo thuộc tính [WebMethod] để chỉ đây là //phương thức dành cho dịchvụ Web. [WebMethod] public float Add(float a, float b) { return a + b; } [WebMethod] public float Subtract(float a, float b) { return a - b; } [WebMethod] public float Multiply(float a, float b) { return a * b; } [WebMethod] public float Divide(float a, float b) { if (b==0) return -1; return a / b; } } } Bây giờ chúng ta sẽ viết mã thực thi cho trang Web. Trang Web của chúng ta sẽ gọi các hàm của dịchvụ tương ứng với các phép cộng, trừ, nhân, chia . Sau đây là mã của trang Web: <%@ Import Namespace="MathService" %> <html> <script language="C#" runat="server"> float operand1 = 0; float operand2 = 0; public void Submit_Click(Object sender, EventArgs E) { try { operand1 = float.Parse(Operand1.Text); operand2 = float.Parse(Operand2.Text); } catch (Exception) { /* bỏ qua lỗi nếu có */ } Các dịchvụWeb Gvhd: Nguyễn Tấn Trần Minh Khang 195 //tạo ra một đối tượng dịchvụ MathService để có thể truy cập đến //các hàm thành viên của chúng. MathService service = new MathService(); switch (((Control)sender).ID) { case "Add" : Result.Text = "<b>Result</b> = " + service.Add(operand1, operand2).ToString(); break; case "Subtract" : Result.Text = "<b>Result</b> = " + service.Subtract(operand1, operand2).ToString(); break; case "Multiply" : Result.Text = "<b>Result</b> = " + service.Multiply(operand1, operand2).ToString(); break; case "Divide" : Result.Text = "<b>Result</b> = " + service.Divide(operand1, operand2).ToString(); break; } } </script> <body style="font: 10pt verdana"> <h4>Using a Simple Math Service </h4> <form runat="server"> <div style="padding:15,15,15,15;background- color:beige;width:300;border-color:black;border- width:1;border-style:solid"> Operand 1:<br> <asp:TextBox id="Operand1" Text="15" runat="server" /><br> Operand 2:<br> <asp:TextBox id="Operand2" Text="5" runat="server" /><p> <input type="submit" id="Add" value="Add" OnServerClick="Submit_Click" runat="server"> <input type="submit" id="Subtract" value="Subtract" OnServerClick="Submit_Click" runat="server"> <input type="submit" id="Multiply" value="Multiply" OnServerClick="Submit_Click" runat="server"> <input type="submit" id="Divide" value="Divide" OnServerClick="Submit_Click" runat="server"> <p> <asp:Label id="Result" runat="server" /> </div> </form> </body> </html> . ra một dịch vụ Web, đóng vai trò là một thư viện chứa một tập các hàm tiện ích. Trang Web của chúng ta sẽ sử dụng các hàm của dịch vụ này. Dịch vụ Web của. Các dịch vụ Web Gvhd: Nguyễn Tấn Trần Minh Khang 192 Chương 16 Các dịch vụ Web Hiện nay, vẫn còn một số hạn chế lớn trong các ứng dụng Web. Người