引子
WCF是"Windows Communication Foundation "的縮寫,原來的代號為"Indigo",它是MS為SOA(Service Oriented Architecture)而設計的一套完整的技術框架。利用它能夠開發出分布式(Distributed)應用程序,而且開發難度相比以前的.Net Remoting和Asp.Net Xml Web Service等都有了大幅度的降低。可以說WCF是目前微軟平台下最先進的SOA框架,也是微軟在今後一段時間內在該領域的主打產品。它具有很多優點,但本人總結起來,其最大的特征在於1)充分整合了原來的.Net Remoting,Asp.Net Xml Web Service,MSMQ,WSE,Enterprise Service等多項分布式技術,取其精華,棄其糟粕。2)WCF雖然整合了幾項技術,但開發難度不增反降,簡單易學。相信在未來的幾年中,WCF一定在SOA的大潮中披荊斬棘,大展身手。本系列文章從大的方向上分為兩個部分,第一部分是介紹WCF相關的理論知識,第二部分是用WCF來開發一個完整的項目實例。希望在理論和實踐上和大家一起學習微軟這個優秀的框架。
本文的出發點和目的
通過閱讀本文,能解決以下幾個問題
WCF是什麼?
WCF能干什麼?
WCF的今生前世?
學習WCF有哪些資源?
本文適合的讀者
對WCF感興趣的初學者,最好以前有一些SOA相關的基礎常識。
WCF是什麼?
比較貼近官方的說法是:WCF(原代號為Indigo)是一個用於創建和運行分布式系統的技術集合,使用它能創建安全的(Secure)、可靠的(Reliable)、跨平台的(transacted messaging along with interoperability)的分布式解決方案。它的面向服務的編程模型整合了.Net平台下以往全部的分布式開發技術,例如.Net Remoting,Asp.Net Xml Web Service,MSMQ,WSE,和Enterprise Service等,它可以支持跨應用程序域(AppDomain),進程(Process),網絡(NetWork)的進行數據通訊,而且能寄宿在諸如IIS,Windows Service,Console,Windows Application等多種宿主(Host)中。它適用於Vista,Xp和Windows 2003等操作系統。是微軟在SOA領域推出的一款主打產品。有關詳細介紹,請參見WCF官方主頁:http://netfx3.com/content/WCFHome.aspx
WCF能干什麼?
在win32中,應用程序是運行在進程(Process)的線程(Thread)中的,.Net平台出現之後,出現了AppDomain,其實就相當於在進程和線程之間又有了一層包裝,類似於子進程的概念,在一個進程(或者應用程序域)中的對象能進行直接的訪問和控制,但超出這個范圍,便不能進行直接的訪問和控制了,所以說進程(或者應用程序域)有一定的隔離作用,如果是分布在不同網絡,不同操作系統上的不同進程,他們進行通訊的難度就更大,而分布式應用程序要求的就是將原本被隔離的作用域通過一定的契約聯系起來,從而達成多個系統的溝通協作。當然能實現這種目的的方式遠不止WCF一個,比如在win32時代,經常使用映射內存文件來實現進程之間的互操作問題,還有在windows程序中,用windows消息wm也能實現不同進程之間的通訊問題,但這些都有局限性,因為他們不能很好的解決跨平台,跨網絡問題,而WCF可以。
WCF的今生前世
早在Web Service出現之前,已經有很多企業都實現了自己的EAI(Enterprise Application Integration)企業應用整合,但此時並沒有被大家所公認的技術規范,所以那時的集成方案比較分散,沒有統一標准,盡管有些EAI做得還比較成功,苦於沒有技術規范,很難得以推廣。而出現Web Service後,由於更大廠商(包括IBM,MS等)的大力支持,Soap成為大家所公認的技術規范,很快就成為了解決這一難題的制勝法寶。MS為響應這種變化,在.Net平台中推出了自身的Web Service產品,也就是Asp.Net Xml Web Service,但這個框架在通訊安全和性能等方面存在著一些難以解決的問題,雖然後來又增加了WSE來彌補不足,但整體看來,Asp.Net Xml Web Service的不足還是顯而易見的。在安全方面,WSE對Xml Web Service作了很大的改進,支持ws等網絡服務的安全標准,但它作為框架的擴展,最新版本3.0還在beta階段,而且這個擴展框架鮮為人知,服務端如果使用了WSE,那也要求客戶端使用,而由於這個框架沒有被廣泛的推廣,很可能給對客戶端開發人員增加開發和部署難度。在性能方面,.Net Remoting技術相比Web Service略有優勢,但學起來有一定難度,最要命的是它不能實現跨平台的操作,一個用.Net Remoting寫的Service很難用Java來調用,這就使得其實用性大打折扣,MSMQ支持消息隊列,但需要整合在其他系統之中,傳統的Enterprise Service支持分布式事務,但同樣沒有Web Service的跨平台特性。此時,WCF應運而生,它整合了MS歷來最優秀的分布式系統開發技術,取其精華,棄其糟粕,是分布式應用程開發技術的集大成者,它解決了跨平台的問題,同時支持安全通訊和分布式事務。由於其簡單易學,在推廣上也必然比較順利,可以說WCF將開辟分布式開發技術的一個新紀元,其影響應該不在當年Web Service之下。