WCF là gì
WCF là công nghệ nền tảng nhằm hợp nhất nhiều mô hình lập trình phân tán thành một mô hình duy nhất cho việc phát triển các ứng dụng hướng dịch vụ
WCF kết hợp các đặc điểm của tất cả công nghệ phân tán như dịch vụ COM+, Web service, và .NET Remoting, để xây dựng một ứng dụng bảo mật, tin cậy và mạnh mẽ, liên lạc giữa các nền tảng khác nhau trong môi trường phân tán
Khi một tiến trình WCF liên lạc với một tiến trình không là WCF, các bản tin SOAP được mã hoá trên cơ sở XML, nhưng khi nó liên lạc với một tiến trình WCF khác, bản tin SOAP có thể được tối ưu hoá dựa trên mã hoá nhị phân
Kiến trúc của WCF
a. Tầng ràng buộc (Contracts layer)
Tầng ràng buộc mô tả các tính năng cung cấp bởi WCF, gồm có
- Ràng buộc dữ liệu (Data contract): định nghĩa các kiểu dữ liệu
[DataContract]
public class MatHang
{
[DataMember]
public string mahang;
[DataMember]
public string tenhang;
}
- Ràng buộc dịch vụ (Service contract): đặc tả chi tiết các biến và phương thức của dịch vụ thông qua giao diện (interface).
OperationContract: đặc tả các phương thức.
FaultContract: gởi các lỗi đến client bằng cách tạo ra lớp lỗi người dùng định nghĩa.
[ServiceContract]
public interface IMatHang
{
[OperationContract]
[FaultContract(typeof(SampleFaultException))]
DataSet GetMatHang(string mahang);
}
[DataContract]
public class SampleFaultException
{
[DataMember]
public string errorMessage;
}
- Ràng buộc thông điệp (Message contract): mô tả định dạng và cấu trúc của một thông điệp trao đổi giữa client và WCF service, sử dụng ngôn ngữ đặc tả XML Schema (XSD)
[MessageContract]
public class StoreMessage
{
[MessageHeader]
public DateTime CurrentTime;
[MessageBodyMember]
public MatHang mathang;
}
Tầng ràng buộc còn bao gồm các chính sách và ràng buộc (bindings) mô tả các điều kiện cần có để giao tiếp với một dịch vụ. Chính sách chỉ ra các yêu cầu bảo mật và các điều kiện khác cần đáp ứng khi client kết nối với dịch vụ. Ràng buộc chỉ ra các giao thức vận chuyển và các kiểu mã hóa sử dụng bởi dịch vụ để liên lạc với client
b. Tầng thực thi dịch vụ (Service runtime layer)
Tầng thực thi dịch vụ chỉ rõ dịch vụ sẽ cư xử thế nào trong quá trình thực hiện.
Các kiểu hành vi khi chạy dịch vụ:
- Hành vi giới hạn (Throttling behavior): giới hạn số kết nối, phiên làm việc (sessions), và truyến đoạn, vì vậy điều khiển số thông điệp đồng thời được xử lý bởi dịch vụ
- Hành vi lỗi (Error behavior): quy định các hành vi khi dịch vụ thực hiện lỗi
- Hành vi siêu dữ liệu (Metadata behavior): quy định làm thế nào và có hay không các siêu dữ liệu của dịch vụ tồn tại cho client
- Hành vi đối tượng (Instance behavior): quy định số đối tượng dịch vụ có thể chạy để xử lý các yêu cầu của client
- Hành vi giao dịch (Transaction behavior): tạo tính đồng nhất dữ liệu, cho phép rollback các giao dịch nếu xảy ra lỗi
- Hành vi kiểm tra (Message inspection): kiểm tra các phần của thông điệp
- Hành vi thông điệp (Dispatch behavior): xác định thông điệp được xử lý bởi dịch vụ WCF như thế nào.
- Hành vi đồng thời (Concurrency behavior): xác định làm thế nào các nhiệm vụ thực hiện đồng thời, giúp cho việc điều khiển số lượng luồng có thể truy nhập tới một thực thể của dịch vụ.
- Hành vi lọc tham đối (Parameter filtering): xác định các chức năng được thực hiện dựa trên lọc tiêu đề thông điệp
c. Tầng thông điệp (Message layer)
Tầng thông điệp gồm các kênh, thông qua kênh thông điệp được xử lý và truyền đến client. Có hai kiểu kênh:
- Kênh vận chuyển (Transport channel): đọc và ghi các thông điệp đến và từ client. Kênh này mã hóa thông điệp theo định dạng chuẩn XML, HTTP, named pipes, TCP. MSMQ là ví dụ của kênh vận chuyển
- Kênh điều khiển (Control channel): xử lý thông điệp bằng cách đọc ghi các tiêu đề bổ sung đến thông điệp. WS-Security và WS-Reliability là ví dụ của kênh điều khiển
d. Tầng chứa và kích hoạt (Hosting và activation layer)
Tầng này hỗ trợ thực hiện dịch vụ trong các môi trường khác nhau, như Windows services, IIS, và Windows Activation Service (WAS)
- Self-hosting: dịch vụ chứa trong bất kỳ ứng dụng, như ứng dụng console, hay Windows application. Kiểu self-hosting rất linh động và dễ sử dụng, nhưng chỉ phù hợp trong giai đoạn phát triển của ứng dụng phân tán
- IIS: dịch vụ chứa trong IIS đảm bảo client truy cập dịch vụ Internet
- Windows Service: dịch vụ chứa trong Windows Service trên máy tính client và tự động dừng khi tắt máy
- WAS (Windows Activation Service) là dịch vụ tồn tài trên hệ điều hành Windows Vista. WAS làm việc với HTTP, TCP, named pipes, và MSMQ. WAS cho phép WCF được kích hoạt một cách tự động khi phân phối tới một máy tính có chạy WAS. Hỗ trợ dịch vụ chạy trên Internet không cần IIS
13.2.3.3 Các tính năng chính của WCF
WCF cung cấp nhiều tính năng. Một số tính năng chính của WCF:
- Transaction: WCF hỗ trợ xử lý giao dịch qua các nền tảng khác nhau
- Host: WCF hỗ trợ chứa dịch vụ trong các môi trường khác nhau, như Windows NT Services, Windows Forms, và ứng dụng console, cũng như ở trên IIS (Internet Information Server) và WAS (Windows Activation Services)
- Bảo mật: tất cả từ thông điệp đến client hay server đều phải xác thực. WCF đảm bảo tính toan vẹn và bảo mật các thông điệp
13.2.3.4 Tạo và sử dụng WCF
Tạo WCF service dể xem thông tin mặt hàng có mã hàng nhập vào.
- File/ New/ Project, chọn WCF Service Application, đặt tên là WCFService.
- Xoá 2 tập tin IService1.cs và Service1.cs
- Sửa web.config: <compilation debug="true" />
- Kích chuột phải vào WCFService, chọn Add/ New Item, WCF Service, đặt tên là MatHang, hiển thị hai tập tin MatHang.svc và IMatHang.cs
- Tập tin IMatHang.cs chứa một giao diện IMatHang. Thay phương thức DoWork thành GetMatHang như sau:
[ServiceContract]
public interface IMatHang
{
[OperationContract]
DataSet GetMatHang(string mahang);
}
- Tập tin MatHang.svc, chứa lớp MatHang cài đặt giao diện IHelloWorld. Thay phương thức DoWork thành GetMatHang như sau:
public class MatHang : IMatHang
{
public DataSet GetMatHang(string mahang)
{
OleDbConnection con = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=banhang.mdb");
OleDbDataAdapter adap = new OleDbDataAdapter
("select * from mathang where mahang = '" + mahang + "'", con);
DataSet dataSet = new DataSet();
adap.Fill(dataSet, "mathang");
return dataSet;
}
}
- Biên dịch WCF service cho tập tin WCFService.dll.
Phương pháp nhanh hơn giúp khai báo các phương thức, thuộc tính của giao diện bằng Visual Studio
- Mở tập tin MatHang.svc. Di chuyển con trỏ tới tên giao diện như hình dưới
- Bấm chuột vào hình chữ nhật nhỏ dưới chữ IMatHang, để tạo nhanh các khai báo cần thiết để cài đặt giao diện
WCF Test Client tìm sửa lỗi dịch vụ WCF. Visual Studio hỗ trợ chương trình WCF Test Client để test dịch vụ của WCF trong thư mục sau:
C:\Program Files\Microsoft Visual Studio\Common7\IDE\WcfTestClient.exe
Gõ lệnh:
path C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE
WcfTestClient.exe http://localhost:2434/MatHang.svc
Để ứng dụng client truy cập WCF service trên Internet, cần host service trên Web server, như IIS, để có thể liên lạc với client qua giao thức HTTP
Một WCF service chứa trong IIS được biểu diễn bởi một tập tin với phần mở rộng .svc. Tập tin .svc chứa chỉ hướng ServiceHost để cấu hình dịch vụ khi ứng dụng client yêu cầu sử dụng dịch vụ lần đầu tiên
<%@ ServiceHost Language="C#" Debug="true" Service="Service"
CodeBehind="~/App_Code/Service.cs" %>
Sử dụng WCF Service host trong IIS, bạn bổ sung tham chiếu đến WCF Service đến ứng dụng WCFClient bằng cách kích phải trên dự án, Add Service Reference với tên tham chiếu (không gian tên) là ServiceReference1.
private void btnxem_Click(object sender, EventArgs e)
{
string mahang = txtMaHang.Text;
// Tạo đối tượng của dịch vụ
WCFClient.ServiceReference1.MatHangClient obj =
new WCFClient.ServiceReference1.MatHangClient();
DataSet dataSet = obj.GetMatHang(carId);
if (dataSet.Tables[0].Rows.Count == 0) MessageBox.Show("Không có mặt hàng này");
else dataGridView1.DataSource = dataSet.Tables[0];
}
» Tin mới nhất:
» Các tin khác: