我經常比較Web Service,.NET Remoting,以及WCF這些技術的異同。我覺得WCF更好地體現了面向接口編程的思路。下面我用一個例子來講解,大家一看應該就理解了
1.創建解決方案
2.創建服務接口
添加一個接口類型
添加引用
編寫該接口。很簡單。就定義了一個OperationContract
3.創建服務類型
添加對接口類型的引用和System.ServiceModel的引用
編寫服務類型
4.創建宿主程序
添加對System.ServiceModel的引用,添加對服務以及接口的引用
編寫程序
【備注】這是完全用代碼的方式進行托管的,當然還可以用配置的方式來完成
5.創建客戶程序
添加對接口類型的引用和System.ServiceModel的引用
編寫客戶端代理類型
6.調試
7.進一步擴展
我另外比較欣賞WCF 的是,它所用到的復雜類型也可以更好地在服務端和客戶端之間共享。一般可以直接用一個Model項目來保存
【備注】關於這一點,我印象最深刻的是在Web Service的架構中,復雜類型在傳遞的時候並不那麼理想。在生成客戶端代理的時候,其實生成那個類型和服務端的那個不是一個東西。
添加引用
8.修改接口,添加一個操作
9。修改服務,實現該操作
10.修改宿主,只需要添加對Model的引用即可
11.修改客戶端
修改代理類
/// <summary>
/// 這個類型往常都是通過工具生成的,但也可以自己編寫
/// </summary>
class HelloServiceClient : ClientBase<Contracts.IHelloContract>,Contracts.IHelloContract{
public HelloServiceClient(Binding binding, EndpointAddress address) : base(binding, address) { }
#region IHelloContract 成員
public string HelloWorld()
{
return Channel.HelloWorld();
}
#endregion
#region IHelloContract 成員
public Model.Employee GetEmployee()
{
return Channel.GetEmployee();
}
#endregion
}
修改調用代碼
static void Main(string[] args)
{
Binding tcpBinding = new NetTcpBinding();
EndpointAddress tcpAddress = new EndpointAddress("net.tcp://localhost:81/HelloService");
HelloServiceClient proxy = new HelloServiceClient(tcpBinding, tcpAddress);
Console.WriteLine(proxy.HelloWorld());
Model.Employee employee = proxy.GetEmployee();
Console.WriteLine(employee);
Console.Read();
}
調試