Phần này giới thiệu về phương pháp phát triển và sử dụng dịch vụ web dựa trên nền tảng .NET.
Như ta đã biết, một dịch vụ Web có thểđược truy cập bằng các giao thức của web và được sử dụng bởi các ứng dụng web. Có ba bước trong phát triển Web
- Tạo dịch vụ web (creating) - Tạo proxy
- Sử dụng dịch vụ web (consuming)
3.3.1 Tạo dịch vụ Web
Một dịch vụ Web là một ứng dụng Web về cơ bản giống như một lớp (class) mà bao gồm các phương thức (methods) có thể sử dụng bởi các ứng dụng khác. Về mặt lập trình, nó khá giống với các trang Web như các trang dựa trên nền tảng ASP.NET, nhưng dịch vụ web không có giao diện người dùng.
Để hiểu rõ khái niệm này; ta lấy ví dụ về tạo một dịch vụ web đơn giản có tên là StockService [5]. Nó cung cấp thông tin về giá cả trên thị trường chứng khoán. Người dùng có thể truy vấn về tên và giá chứng khoán bằng cách sử dụng các mã chứng khoán của các công ty đã niêm yết. Ví dụ mã chứng khoán của công ty cổ phần đầu tư và phát triển công nghệ là FPT. Đểđơn giản, các giá trịđược gán bằng tay (hardcoded) trên một mảng hai chiều. Dịch vụ web này sẽ có 3 phương thức:
- HelloWorld - GetName
- GetPrice
Trước hết, ta thực hiện các bước sau để tạo một dịch vụ web mới
Bước 1: chọn File->New->Website trong bộ công cụ Visual Studio và chọn ASP.NET Web Service
Bước 2: Sẽ xuất hiện một tên dịch vụ (ngầm định) là Service.asmx ta đổi tên thành StockService.asmx; đồng thời đổi tên Service.cs thành StockService.cs trong thư mục App_Code. Sau đó hướng chỉ thị sau vào file .asmx.
Bước 3: Mở file StockService.cs để bổ sung thêm C# code vì nội dung code của file này được tự động sinh ra ngầm định (từ phương thức HelloWorld). Ta thêm vào một mảng hai chiều gồm các xâu kí tự là các mã chứng khoán và giá của chúng. Đồng thời ta cần viết mã cho hai phương thức GetName và GetPrice để lấy ra mã chứng khoán và giá của chúng.
<%@ WebService Language="C#"
CodeBehind="~/App_Code/StockService.cs"
Hình 3.3: Mã chương trình của dịnh vụ Web StockService
using System; using System.Linq; using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols; using System.Xml.Linq;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // [System.Web.Script.Services.ScriptService]
public class StockService : System.Web.Services.WebService
{
public StockService () {
//Uncomment the following if using designed components //InitializeComponent();
}
string[,] stocks = {
{"FPT", "Công ty Cổ phần FPT", "60,450"},
{"KTB", "Công ty Khoáng sản Tây Bắc", "52,556"},
{"MSN", "Công ty Công ty Masan", "120,225"},
{"NTP", "Công ty Nhựa tiền phong", "45,365"},
{"TTC", "Công ty Gỗ trường thành", "11,110"}
};
[WebMethod]
public string HelloWorld() { return "Hello World"; }
[WebMethod]
public double GetPrice(string symbol) {
//it takes the symbol as parameter and returns price for (int i = 0; i < stocks.GetLength(0); i++)
{
if (String.Compare(symbol, stocks[i, 0], true) == 0) return Convert.ToDouble(stocks[i, 2]);
}
return 0; }
[WebMethod]
public string GetName(string symbol) {
// It takes the symbol as parameter and // returns name of the stock
for (int i = 0; i < stocks.GetLength(0); i++) {
if (String.Compare(symbol, stocks[i, 0], true) == 0) return stocks[i, 1];
}
return "Không tìm thấy Mã chứng khoán: " + symbol; }
Bước 4: Chạy thử dịch vụ
Khi chạy thử dịch vụ bằng cách gõ liên kết đến tên của dịch vụ web; chẳng hạn
http://localhost:1080/WebService/StockService.asmx từ cửa sổ URL của trình duyệt ta thấy xuất hiện như hình 3.4
Hình 3.4: Chạy thử dịnh vụ Web StockService [5]
Khi chọn các phương thức GetName (hoặc GetPrice) rồi gõ giá trị vào kết quả sẽ hiển thị đúng tên công ty khi ta gõ đúng tên mã chứng khoán.
3.3.2 Sử dụng dịch vụ Web
Để sử dụng được dịch vụ Web vừa tạo. Ta cần tạo một trang web để gọi đến (invoke) các phương thức của dịch vụ Web. Giả sử ta có thể tạo một trang có giao diện đơn giản gồm một nhãn (label control) để hiển thị các kết quả trả về hai nút bấm (button control) để quay lại và để gọi hàm của dịch vụ. Mã chương trình của trang web này được trình bầy ở hình 3.5
Hình 3.5: Mã chương trình cho giao diện trang web [5]
Tạo proxy
Trước khi sử dụng được dịch vụ thì proxy cần được tạo ra đểđăng kí với ứng dụng khách (client). Proxy cho phép gọi đến dịch vụ Web bằng các phương thức cục bộ. Proxy nhận lời gọi hàm và đổi chúng thành yêu cầu SOAP để gửi đến máy chủ web. Máy chủ web trả về các gói SOAP đến client và proxy sẽ giải mã các gói (package) SOAP và hiển thị chúng trên ứng dụng client.
Mã proxy cho sử dụng dịch vụ Web StockService này được trình bày trong hình 3.6. Hình 3.6: Mã proxy [5] <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wsclient._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Untitled Page</title> </head>
<body>
<form id="form1" runat="server"> <div>
<h3>Using the Stock Service</h3> <br />
<br />
<asp:Label ID="lblmessage" runat="server"></asp:Label> <br />
<br />
<asp:Button ID="btnpostback" runat="server" onclick="Button1_Click"
Text="Post Back" style="width:132px" />
<asp:Button ID="btnservice" runat="server" onclick="btnservice_Click"
Text="Get Stock" style="width:99px" /> </div>
</form> </body> </html>
protected void btnservice_Click(object sender, EventArgs e) {
StockService proxy = new StockService();
lblmessage.Text = String.Format("FPT có giá: {0}", proxy.GetPrice("FPT").ToString());
Hình 3.7: Mã chương trình goi đến (invoke) các hàm của dịch vụ Web [5]