WCF 被關注的時間已經(jīng)很長了,全名 "Windows Communication Foundation",它還有另外一個名字叫
Indigo,這應該是微軟邁向 SOA 一個重要的標志。對開發(fā)者而言,一個統(tǒng)一的模型整合了以往零零碎碎的 WebService、Remoting、MSMQ 等技術,讓分布式開發(fā)變得更加簡單。
SOA 現(xiàn)在很熱鬧,但它早已經(jīng)出現(xiàn)。最初廠商和網(wǎng)站炒 "WebServices" 的時候,SOA 就已經(jīng)是個熱門詞匯了。但是在實際開發(fā)中,WebServices 和 .NET Remoting 的使用度并不高,原因太多太復雜。不過 WCF 的出現(xiàn),相信會推進這一進程。
面向服務(SOA, service-oriented application)示意圖WCF 的架構模型和 .NET Remoting 有些類似,下圖很好地說明了其執(zhí)行的流程和相關結構。
WCF 架構示意圖WCF 宿主架構示意圖作為一種邊界清晰、中立、高度獨立的開發(fā)模型,WCF 幾乎可用于所有的分布開發(fā)模式。
WCF 通訊方式示意圖(以上圖片均選自《Programming WCF Services》)
幾乎所有的 WCF 的開發(fā)文章里都會提到一個名為 "
ABC" 的說法,分別是 Address、Binding 和 Contract。
Address表示服務的地址。比如 "
http://localhost:8080/myservice.svc";
Binding表示綁定策略??梢詾閱蝹€服務添加多個綁定,如內部采取 NetTcpBinding(Binary),外網(wǎng)則采取 WSHttpBinding(Text),當然一個 Binding 也可用于多個服務;
Contract表示服務契約。在 SOA 中客戶端和服務器之間并沒有直接的對象繼承和引用關系,雙方通過一種約定的格式來傳遞消息(Message),這種約定就是契約。
在實際開發(fā)中,我們往往會將 "ABC" 反過來進行。首先定義及實現(xiàn)契約,然后選擇合適的綁定模式,最后定義服務的地址。在 WCF 中,服務對象不再需要從 MarshalByRefObject 繼承,我們也無需再關心 SAO、CAO 之類的區(qū)別,其模式更類似于 ASP.NET WebService,同樣也支持 Session。WCF 更多地使用聲明式編程模式,通過大量的特性(Attribute)來描述服務策略。