WINDOWS
COMMUNICATION
FOUNDATION
Khoa Công nghệ Thông tin
Ths. Nguyễn Văn Lót
Wednesday, March 21, 2012
1
WINDOWS COMMUNICATION FOUNDATION - WCF
GIỚI THIỆU
Đƣợc giới thiệu ở .NET 3
WCF cung cấp mô hình lập trình đơn giản, thống
nhất và có thể mở rộng và có thể tƣơng tác với các
công nghệ phân tán khác: DCOM, .NET
Remoting, XML web service, Sockets, P2P,…
Tích hợp các công nghệ phân tán vào trong API
với namespace System.ServiceModel
Cung cấp các công nghệ khác nhau để ngƣời sử
dụng service có thể sử dụng dễ dàng. Ví dụ WCF
có thể cung cấp service làm việc với giao thức TCP
hoặc sử dụng XML web service
Wednesday, March 21, 2012
2
WCF
CÁC NÉT ĐẶC TRƢNG
Hỗ trợ “strongly typed” định dạng cũng nhƣ
“untyped” messages.
Cho phép ứng dụng .net chia sẽ kiểu dữ liệu hiệu
quả giữa các nền (ví dụ J2EE)
Hỗ trợ nhiều binding ( HTTP, TCP, MSMQ,
named pipes) cho phép chọn loại thích hợp để
truyền tải dữ liệu
Hỗ trợ các web service chuyên biệt gần nhất (WS-
Policy, WS-Security, WS-Trust,…)
Tích hợp đầy đủ mô hình anh ninh và các kỹ thuật
an ninh
Hỗ trợ session cũng nhƣ hỗ trợ one-way message
Wednesday, March 21, 2012
3
KIẾN TRÚC CỦA WCF
Wednesday, March 21, 2012
4
CÁC THÀNH PHẦN CƠ BẢN CỦA ỨNG DỤNG WCF
The WCF Service assembly: *.dll chứa đựng các
class và interface trình bày các chức năng
(functions) để ngƣời khác có thể gọi
The WCF Service host: host WCF Service
assembly
The WCF client: đây là một application truy xuất
các chức năng của service qua proxy
Wednesday, March 21, 2012
5
ABCS CỦA WCF
Host và client trao đổi với nhau thông qua ABCs
(address, binding, contact)
Address: Xác định vị trí của service
Binding: chỉ định kênh trao đổi thông tin
Contract: mô tả các phƣơng thức của service
Wednesday, March 21, 2012
6
WCF CONTRACT
Là key để xây dựng WCF service. Nó giúp mô tả
service, kiểu dữ liệu và các hàm của service
[ServiceContract]: mô tả interface của service
[OperationContract]: mô tả hàm/thủ tục của
service
[DataContract]: mô tả kiểu dữ liệu mới của service
Wednesday, March 21, 2012
7
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType
composite);
}
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
…….
WCF BINDING
Binding là đối tƣợng đƣợc sử dụng để chỉ định chi
tiết trao đổi dữ liệu đƣợc yêu cầu để nối kết đến
endpoint của WCF
Binding có thể chứa các thông tin cơ bản sau:
Protocol: Xác định bộ máy mã bảo mật
đƣợc sử dụng
Encoding: xác định mã hoá
thông tin: text, binary
Transport: xác định giao thức
truyền dữ liệu: tcp, http,…
Wednesday, March 21, 2012
8
WCF BINDING
Một số wcf binding hệ thống thƣờng dùng
HTTP-Based Bindings
BasicHttpBinding: Đƣợc sử dụng để xây dựng WS-Basic
Profile (WS-I Basic Profile 1.1). Binding này sử dụng HTTP
nhƣ phƣơng tiện vận chuyển và Text/XML nhƣ mã hoá
message mặc định
WSHttpBinding: Tƣơng tự BasicHttpBinding, nhƣng cung
cấp nhiều tính năng web service: cung cấp giao dịch
(transaction), thông tin tin cậy (reliable) và WS-Address
TCP-Based Bindings
NetNamedPipeBinding:Một Binding an ninh, tin cậy cho
việc trao đổi trên cùng máy giữa các ứng dụng .NET
MSMQ-Based Bindings
NetMsmqBinding: Binding hàng đợi (queued) thích hợp cho
trao đổi giữa các máy giữa các ứng dụng .NET
Wednesday, March 21, 2012
9
WCF ADDRESS
WCF Address giúp xác định endpoint và chỉ cho
các customer của service địa chỉ của nó
Address có các thông tin cơ bản sau:
Scheme: giao thức vận chuyển. Ex. http, tcp, msmq
MachineName: Tên domain của máy
Port: Cổng đƣợc sử dụng. Ví dụ port 80 cho http
binding
Path: đƣờng dẫn đến WCF Service
Wednesday, March 21, 2012
10
Scheme://<machineName>[:Port]/Path
http://localhost:8080/MyWCFService
net.tcp://localhost:8080/MyWCFService
net.msmq://localhost:8080/MyWCFService
XÂY DỰNG WCF SERVICE
Khi xây dựng wcf service, nó bao gồm 2 phần:
Interface và Implementation
Wednesday, March 21, 2012
11
[ServiceContract]
public interface IServiceTest
{
[OperationContract]
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
public class Service1 : IServiceTest
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
XÂY DỰNG WCF SERVICE
Thuộc tính [ServiceContract]
Dùng để mô tả Service
Một số thuộc tính của ServiceContract
Wednesday, March 21, 2012
12
[ServiceContract(Namespace="")]
public interface IServiceTest
{
}
CallbackContract
Đƣợc sử dụng nếu Service yêu cầu callback cho việc trao
đổi two-way
ConfigurationName
Đƣợc sử dụng để xác định phần tử service trong ứng
dụng. Mặc định là tên class implementation
ProtectionLevel
Chỉ định mức độ binding yêu cầu mã hoá, chữ ký số
SessionMode
Đƣợc sử dụng để thiết đặt session
XÂY DỰNG WCF SERVICE
Thuộc tính [OperationContract]
Chỉ định phƣơng thức thuộc WCF Service
Wednesday, March 21, 2012
13
Action
Get hoặc Set WS-Addressing của message yêu cầu
AsyncPattern
Xác định toán tử đƣợc thực hiện không đồng bộ
Asynchronous
IsInitiating
Get hoặc set giá trị mà chỉ định có hay không phƣơng thức
thực hiện toán tử có thể khởi tạo một session
IsOneWay
Chỉ định one way message ( chỉ input message, không
output hoặc biến tham chiếu)
IsTerminating
Chỉ định WCF runtime kết thúc giao dịch hiện tại sau khi
toán tử thực hiện xong
XÂY DỰNG WCF SERVICE
VÍ DỤ
Toán tử OneWay
Khởi tạo Session
Asyncronous
Wednesday, March 21, 2012
14
[OperationContract(IsOneWay = true)]
void AddTo(double n);
[OperationContract(IsOneWay = true)]
void SubtractFrom(double n);
[OperationContract(IsOneWay=true,IsInitiating=true,IsTerminating=false)]
public void MethodOne()
{
return;
}
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginDoWork(int count, AsyncCallback callback, object
state);
XÂY DỰNG WCF SERVICE
Thuộc tính [DataContract]
Định nghĩa kiểu dữ liệu mới cho phƣơng thức của
WCF Service, dùng để mô tả dữ liệu đƣợc trao đổi giữa
client and service
Wednesday, March 21, 2012
15
[ServiceContract]
public interface ISampleInterface
{
[OperationContract]
bool ApprovePurchaseOrder(MyTypes.PurchaseOrder po);
}
XÂY DỰNG WCF SERVICE
Thuộc tính [DataContract] (tt)
Wednesday, March 21, 2012
16
namespace MyTypes
{
[DataContract]
public class PurchaseOrder
{
private int poId_value;
// Apply the DataMemberAttribute to the property.
[DataMember]
public int PurchaseOrderId
{
get { return poId_value; }
set { poId_value = value; }
}
}
}
HOST WCF SERVICE
IIS và Window Service thƣờng đƣợc sử dụng để
host WCF Service
Thiết đặt ABCs trong Web.config nhằm mục đích
phục vụ những nhu cầu khác nhau của service
Wednesday, March 21, 2012
17
<services>
<service name="WcfService1.Service1">
<endpoint address="" binding="basicHttpBinding"
contract="WcfService1.ICalculator"></endpoint>
<endpoint address="mex" binding="mexHttpBinding"
contract="WcfService1.ICalculator" ></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8077/Service1.svc" />
</baseAddresses>
</host>
</service>
</services>
SỬ DỤNG WCF SERVICE
Tạo proxy client/gọi service qua Visual Studio
Wednesday, March 21, 2012
18
SỬ DỤNG WCF SERVICE
Sử dụng đối tƣợng proxy để truy xuất các phƣơng
thức của service
Wednesday, March 21, 2012
19
CalculatorClient client = new
CalculatorClient("BasicHttpBinding_ICalculator");
ViewBag.Message = client.Subtract(20, 4);
Tên endpoint đƣợc sử dụng
BẢO MẬT WCF
Có 2 cách bảo mật cơ bản trong wcf là: message
and transport security. Tuy nhiên có thể kết hợp
2 loại này
Transport Security
Wednesday, March 21, 2012
20
BẢO MẬT WCF
Transport security đƣợc sử dụng trong trƣờng hợp
Cả service and client đƣợc đặt ở intranet
Message đƣợc gửi trực tiếp từ ứng dụng đển wcf
service và message không đƣợc đi qua một hệ thống
trung gian khác
Ƣu điểm Transport security
Nó cung cấp khả năng tích hợp và các phƣơng tiện để
các thành phần trao đổi có thể làm việc với nhau
Nâng cao việc trình diễn (performance)
Luồng (stream) đƣợc sử dụng
Wednesday, March 21, 2012
21
BẢO MẬT WCF
Message security
Message security đƣợc sử dụng trong trƣờng hợp
Message đƣợc gửi đến một wcf service và message này
đƣợc chuyển đến một wcf service khác hoặc đi đến một
hệ thống trung gian khác
Wcf client truy xuất wcf service thông qua internet
Wednesday, March 21, 2012
22
BẢO MẬT WCF
Ƣu điểm của message security
Cung cấp end-to-end security
Cho phép một phần hoặc những message đƣợc chọn để
bảo mật, do đó nâng cao đƣợc sự trình diễn
Hỗ trợ nhiều kênh vận chuyển (transport)
Wednesday, March 21, 2012
23
BẢO MẬT WCF
VÍ DỤ TRANSPORT MESSAGE SECURITY
Ví dụ sử dụng user name và password để chứng
thực tính hợp lệ khi sử dụng service và sử dụng
SSL để mã hoá dữ liệu trong quá trình truyền tải
Bƣớc 1: Xây dựng service
Bƣớc 2: Định nghĩa hàm validate để kiểm tra tính
hợp lệ của tài khoản
Wednesday, March 21, 2012
24
public class AuthenticationHelper : UserNamePasswordValidator
using System.IdentityModel.Selectors;
BẢO MẬT WCF
VÍ DỤ TRANSPORT MESSAGE SECURITY
Wednesday, March 21, 2012
25
public override void Validate(string userName, string password){
if (userName == null || password == null){
throw new Exception("User Name or Password cannot be null");
}
if (!this.CheckIfUserNameExist(userName)){
throw new Exception("Sorry!This User is Not Present");
}
if (!this.AuthenticateUser(userName, password)){
throw new Exception("Invalid User Name or Password");
}
}
private bool CheckIfUserNameExist(string userName)
private bool AuthenticateUser(string userName, string password)