Dịch vụ Web XML mang lại khả năng truy cập dữ liệu phổ quát. Bạn có thể cho phép nhiều ứng dụng khách trên Internet truy cập cơ sở dữ liệu của công ty, tích hợp dữ liệu vào các trang web của bên thứ ba hoặc thậm chí cho phép đối tác kinh doanh truy vấn dữ liệu thông qua dịch vụ Web của họ. Bài viết này sẽ hướng dẫn bạn cách tạo một dịch vụ Web đơn giản để hiển thị nội dung cơ sở dữ liệu cho Internet Explorer, các dịch vụ Web của bên thứ ba và các ứng dụng khách tùy chỉnh bằng C# và VB.NET.
Các đối tác, khách hàng và nhân viên ngày càng quen thuộc với việc làm việc với dữ liệu trên nhiều thiết bị khác nhau. Bất kể cấu trúc cơ sở dữ liệu hiện tại của bạn là gì, dịch vụ Web sẽ trả về dữ liệu dưới dạng XML để đảm bảo khả năng tương thích. Ví dụ, hãy tưởng tượng một công ty logistics (đối tác của bạn) vận chuyển hàng hóa cho khách hàng của bạn. Khi xe tải đến địa chỉ của khách hàng, thông tin cập nhật về địa chỉ người nhận có thể hiển thị trên PDA của tài xế. Nếu khách hàng thay đổi địa chỉ trong cơ sở dữ liệu của bạn, sự thay đổi này sẽ tự động được cập nhật trên hệ thống của đối tác logistics, cho phép họ dễ dàng định tuyến lại xe tải nếu cần.
Bây giờ, chúng ta sẽ bắt đầu xây dựng dịch vụ Web ASP.NET truy cập cơ sở dữ liệu của riêng mình. Trước tiên, hãy kiểm tra xem cơ sở dữ liệu của bạn có thể xuất dữ liệu dưới dạng XML một cách dễ dàng hay không và liệu ADO.NET có thể đọc và chuyển đổi dữ liệu đó một cách linh hoạt hay không. Trong một số trường hợp, bạn có thể cần điều chỉnh cơ sở dữ liệu hiện tại để đáp ứng yêu cầu này. Nếu mã truy cập cơ sở dữ liệu của bạn trở nên quá phức tạp và ảnh hưởng đến khả năng mở rộng, bạn nên xem xét việc chuyển đổi cơ sở dữ liệu.
Để đơn giản hóa, ví dụ này giả định cơ sở dữ liệu chỉ có một bảng là "Products". Tất nhiên, cơ sở dữ liệu của bạn có thể có nhiều bảng và dịch vụ Web của bạn có thể cần truy cập nhiều hơn một cơ sở dữ liệu.
Tiếp theo, chúng ta sẽ viết mã. Mở Visual Studio .NET và tạo một dự án ASP.NET Web Services bằng C# trong thư mục DataBaseWebService. Sau đó, nhấp chuột phải vào tệp Service1.asmx, đổi tên nó thành DataBaseWebService.asmx. Tệp này sẽ chứa các phương thức WebMethod để lấy dữ liệu từ cơ sở dữ liệu. Sau đó, nhấp chuột phải và chọn "View Code" để chuyển sang chế độ xem mã, đổi tên lớp và hàm tạo thành DataBaseWebService.
Bắt đầu bằng cách thêm các tham chiếu đến các thư viện lớp .NET:
using System.Data.SqlClient;
using System.Data.OleDb;
Sau đó, đổi tên lớp thành DataBaseWebService:
public class DataBaseWebService : System.Web.Services.WebService
{
public DataBaseWebService()
{
//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();
}
//...
}
Thay thế phương thức "Hello World" mặc định bằng mã của riêng bạn. Phương thức đầu tiên, SQLDB, được thiết kế để truy cập cơ sở dữ liệu SQL Server. Nó xử lý các truy vấn SQL Server do ứng dụng khách gửi đến. Tham số của SQLDB được truyền từ thanh địa chỉ của trình duyệt dưới dạng câu lệnh truy vấn. Tất cả các phương thức WebMethod nên có khối try/catch để xử lý lỗi và xuất thông báo lỗi nếu truy vấn thất bại. Nếu một phương thức WebMethod gặp ngoại lệ trong quá trình thực thi, khối catch sẽ tạo một tập dữ liệu (DataSet) chứa một bảng "Error" với thông tin lỗi.
Phương thức SQLDB trước tiên tạo và mở kết nối cơ sở dữ liệu SQL. Chuỗi kết nối là duy nhất cho máy chủ của bạn. Ví dụ này sử dụng cơ sở dữ liệu mẫu đi kèm với Visual Studio .NET. Tiếp theo, phương thức SQLDB tạo một bộ điều hợp dữ liệu SQL (SqlDataAdapter). Tham số Query xác định các bản ghi dữ liệu sẽ được trả về. Cuối cùng, nó tạo một tập dữ liệu chứa kết quả truy vấn ở định dạng XML, với "Results" là nút gốc. Mã như sau:
[WebMethod]
public DataSet SQLDB(string Query)
{
try
{
SqlConnection CS =
new SqlConnection("server=(local)//NetSDK;database=Northwind;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter(Query, CS);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "Results");
return myDataSet;
}
catch (Exception ex)
{
return DataError(ex);
}
}
Phương thức truy vấn cơ sở dữ liệu ACCESS cũng tương tự như phương thức truy vấn SQL. Toàn bộ mã được cung cấp dưới đây để thuận tiện cho việc kiểm tra:
[WebMethod]
public DataSet AccessDB(string Query)
{
try
{
string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ this.Server.MapPath("AccessWebServices.mdb");
OleDbConnection myAccessConn = new OleDbConnection(strAccessConn);
OleDbCommand myAccessCommand = new OleDbCommand(Query, myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
myAccessConn.Open();
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet, "Results");
myAccessConn.Close();
return myDataSet;
}
catch (Exception ex)
{
return DataError(ex);
}
}
Cuối cùng, hãy thêm phương thức xử lý lỗi:
public DataSet DataError(Exception ex)
{
DataSet errDS = new DataSet("Errors");
DataTable errTable = errDS.Tables.Add("Error");
errTable.Columns.Add("Message");
errTable.Rows.Add(new Object[] { ex.Message });
return errDS;
}
Bây giờ, bạn có thể biên dịch dự án và kiểm tra xem dịch vụ Web của mình có hoạt động bình thường không. Nếu hoạt động đúng, kết quả sẽ hiển thị như sau:
Sau đó, chọn loại cơ sở dữ liệu của bạn, như trong hình dưới đây:
Chọn AccessDB (Lưu ý: Trước khi thực hiện thao tác này, hãy tạo cơ sở dữ liệu AccessWebServices.mdb, tạo bảng AcessTableTest và đặt nó trong thư mục DataBaseWebService). Trong phần Query, nhập "select \* from AcessTableTest" và nhấp vào "Invoke". Bạn sẽ nhận được kết quả truy vấn ở định dạng XML, hiển thị như sau:
Nếu kết quả tương tự như hình trên xuất hiện, điều đó có nghĩa là dịch vụ Web của bạn đã sẵn sàng để sử dụng.
Khi kết hợp với XSL, bạn có thể tạo các trang HTML có thể duyệt được. Bạn cũng có thể nhập trực tiếp vào thanh địa chỉ: http://localhost/DataBaseWebService/DataBaseWebService.asmx/AccessDB?Query=select+\*+from+AcessTableTest để nhận dữ liệu mong muốn.
Tiếp theo, chúng ta sẽ viết một ứng dụng khách bằng C# để sử dụng dịch vụ Web này. Tạo một dự án ứng dụng Windows mới trong VS.NET có tên là WebServicesClient. Trên Solution Explorer, nhấp chuột phải và chọn Add Web Reference. Trong hộp thoại xuất hiện, nhập:
http://localhost/DataBaseWebService/DataBaseWebService.asmx
Sau đó nhấp vào "Add Reference". VS.NET sẽ thêm các tệp cần thiết vào dự án của bạn. Thêm một menu vào Form1 và thêm hai mục menu: "Get SQL Server Product List" và "Get Access Product List". Để sử dụng dịch vụ Web vừa tạo, hãy tạo một phiên bản của dịch vụ Web, như sau:
private void menuItem1_Click(object sender, System.EventArgs e)
{
WebServicesClient.localhost.DataBaseWebService Database
= new WebServicesClient.localhost.DataBaseWebService();
DataSet ds = Database.SQLDB("select * from Products");
dataGrid1.DataSource = ds.Tables[0];
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
WebServicesClient.localhost.DataBaseWebService Database
= new WebServicesClient.localhost.DataBaseWebService();
DataSet ds = Database.AccessDB("select * from AcessTableTest");
dataGrid1.DataSource = ds.Tables[0];
}
Cuối cùng, chạy ứng dụng Windows mới tạo. Bạn có thể lấy dữ liệu từ cơ sở dữ liệu tương ứng như đã minh họa. Hình ảnh dưới đây cho thấy kết quả: