+ 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)
Tầng contract còn bao gồm các yêu cầu 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ụ
Yêu cầu gồm 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
- Tầng dịch vụ thực thi 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à tuyế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
- 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
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 Process Activation Service (WAS) 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
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
Ví dụ: Xây dựng ứng dụng viết chữ Hello World ra màn hình sử dụng WCF
File/ New/ Project, chọn WCF Service Application, đặt tên là WcfServiceHello
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 WcfServiceHello, chọn Add/ New Item, WCF Service, đặt tên là HelloWorld, hiển thị hai tập tin HelloWorld.svc và IHelloWorld.cs
Tập tin IHelloWorld.cs chứa một giao diện IHelloWorld, đây là contract cho dịch vụ. Thay hàm DoWork thành SayHello như sau:
[ServiceContract]
public interface IHelloWorld
{
[OperationContract]
string SayHello(string inputName);
}
Tập tin HelloWorld.cs, chứa lớp HelloWorld, lớp này sẽ cài đặt contract cho dịch vụ nghĩa là cài đặt giao diện IHelloWorld. Thay hàm DoWork thành SayHello như sau:
public class HelloWorld : IHelloWorld
{
public string SayHello(string inputName)
{
return "Chào bạn " + inputName;
}
}
Biên dịch và chạy ứng dụng