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