[WCF 學習筆記] 1. 基本概念

WCF 被關注的時間已經很長了,全名 "Windows Communication Foundation",它還有另外一個名字叫 Indigo,這應該是微軟邁向 SOA 一個重要的標誌。對開發者而言,一個統一的模型整合了以往零零碎碎的 WebService、Remoting、MSMQ 等技術,讓分佈式開發變得更加簡單。

SOA 現在很熱鬧,但它早已經出現。最初廠商和網站炒 "WebServices" 的時候,SOA 就已經是個熱門詞彙了。但是在實際開發中,WebServices 和 .NET Remoting 的使用度並不高,原因太多太複雜。不過 WCF 的出現,相信會推進這一進程。

面向服務(SOA, service-oriented application)示意圖

uploads/200704/11_134231_soa.gif



WCF 的架構模型和 .NET Remoting 有些類似,下圖很好地說明了其執行的流程和相關結構。

WCF 架構示意圖

uploads/200704/11_133734_wcf_architecture.gif



WCF 宿主架構示意圖

uploads/200704/11_133944_wcf_host_architecture.gif



作爲一種邊界清晰、中立、高度獨立的開發模型,WCF 幾乎可用於所有的分佈開發模式。

WCF 通訊方式示意圖

uploads/200704/11_134236_wcf_comm.gif

 

uploads/200704/11_134240_wcf_comm2.gif



(以上圖片均選自《Programming WCF Services》)

幾乎所有的 WCF 的開發文章裏都會提到一個名爲 "ABC" 的說法,分別是 Address、Binding 和 Contract。Address表示服務的地址。比如 "http://localhost:8080/myservice.svc";Binding表示綁定策略。可以爲單個服務添加多個綁定,如內部採取 NetTcpBinding(Binary),外網則採取 WSHttpBinding(Text),當然一個 Binding 也可用於多個服務;Contract表示服務契約。在 SOA 中客戶端和服務器之間並沒有直接的對象繼承和引用關係,雙方通過一種約定的格式來傳遞消息(Message),這種約定就是契約。

在實際開發中,我們往往會將 "ABC" 反過來進行。首先定義及實現契約,然後選擇合適的綁定模式,最後定義服務的地址。在 WCF 中,服務對象不再需要從 MarshalByRefObject 繼承,我們也無需再關心 SAO、CAO 之類的區別,其模式更類似於 ASP.NET WebService,同樣也支持 Session。WCF 更多地使用聲明式編程模式,通過大量的特性(Attribute)來描述服務策略。

[ServiceContract()]
public interface ICalculate
{
  [OperationContract]
  double Add(double a, double b);
}

public class CalculateService : ICalculate
{
  public double Add(double a, double b)
  {
    return a + b;
  }
}


除了上面這些,我們還會接觸到 Behavior、Message 等信息。Behavior 用於對服務器進行一些設置,比如開放 WSDL 信息獲取,反饋出錯信息等。MessageContract 則可以自定義通訊消息,包括添加自定義的 Head。

和 Remoting 一樣,我們可以選擇不同的宿主,包括 IIS、WinForm、Windows Service、Console 等。推薦使用配置文件來完成服務器和客戶端設置,但同樣支持編碼方式。WCF 客戶端依然是一個代理對象,這個代理類型的代碼一般由 Svcutil.exe 工具來生成。

[最後修改由 yuhen, 於 2007-04-15 15:47:27]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章