為你解疑:WCF是什么
對于WCF的知識很是很值得我們去挖掘的,我運用WCF開發也快一年了,但是現在也是只知道皮毛,現在就把我所知道的和大家說說,我們這里就先說說WCF是什么。“學以致用”,如果僅僅是希望能夠在項目中合理地應用WCF,那么對于程序員而言,可以有兩種選擇,一種是“知其然而不知其所以然”,只要掌握了WCF的基礎知識,那么對于一般的應用就足夠了。要做到這一點就很容易了,微軟秉承了一貫的方式,將WCF這門技術優雅地呈現給開發者,封裝了復雜的實現邏輯,提供了易于調用的類庫和相關的工具,使得開發者能夠快速地完成WCF程序的開發。另外一種方式自然就是深度挖掘WCF的內部實現了,這是對WCF專家提出的要求。如果我們要應用WCF實現SOA解決方案,就會遭遇許多WCF的高級應用,如何合理、有效地應用WCF,并根據項目實際情況對WCF進行擴展,就成為了WCF專家必須解決的難題。
因此,如果要學習WCF,你必須找準自己學習的動機與目標,然后合理地安排自己的學習進度表,這才是正確的學習方式。本文試圖對WCF的一些基礎概念作一些試探性的闡述與分析,并以問答的方式組織,希望能夠部分解答一些希望學習WCF,但猶自徘徊在門外的開發者。
WCF是什么?
從 WCF所處的位置來看,它是包含在.NET 3.0(也包括.NET 3.5)之中的。我們注意比較.NET 3.0與.NET 2.0,其實***的區別就是.NET 3.0包含了WCF、WPF、WF(或者還有CardSpace)而已。因此,我們認為WCF是.NET框架的一部分,似乎并不為過。尤為關鍵的是,WCF并不能脫離.NET框架而單獨存在(但非WCF客戶端可以調用WCF服務),因此,雖然WCF是微軟用以應對SOA解決方案的開發需求而專門推出的,但它并不是例如Spring、Struts那樣的框架,也不是像EJB那樣的容器或者服務器。微軟真正符合SOA企業應用服務器角色的,我想應該是Biztalk Server。
#T#嚴格的說,WCF就是專門用于服務定制、發布與運行以及消息傳遞和處理的一組專門類的集合,也就是所謂的“類庫”。這些類通過一定方式被組織起來,共同協作,并為開發者提供了一個統一的編程模式。WCF之所以特殊,是在于它所應對的場景與普通的.NET類庫不同,它主要用于處理進程間乃至于機器之間消息的傳遞與處理,同時它引入了SOA的設計思想,以服務的方式公布并運行,以方便客戶端跨進程和機器對服務進行調用。實際上,WCF就是微軟對于分布式處理的編程技術的集大成者,它將DCOM、Remoting、Web Service、WSE、MSMQ集成在一起,從而降低了分布式系統開發者的學習曲線,并統一了開發標準。
WCF與其它類庫還有不同的地方,則在于WCF充分地體現了運行時環境的概念。WCF是什么?對于早期使用WCF的開發人員而言,就可能知道如果在.NET 2.0下要開發WCF,還需要專門下載一個Runtime Component 3.0版,其中就包含了WCF、WF等內容。在.NET中一貫存在所謂“宿主”的概念,整個.NET Framework(或者說是CLR)就可以認為是一個大的宿主,就像Java的虛擬機一樣。由于WCF對服務有著專門的需求,對于服務端,需要發布和運行服務;對于客戶端,則需要調用服務;因而對于開發者,就需要編寫定義、發布、運行、調用服務的相關代碼。而服務就只能運行在特定的宿主上,這些宿主可以是控制臺應用程序進程、Windows或Web應用程序進程,也可以是Windows服務進程,或者為最常用的IIS宿主。在宿主內部,則封裝了通道堆棧,其中又包含了對協議、編碼、消息傳輸、代理的處理。而在通道層的頂部,還提供了一個高級運行時,以針對應用程序的開發人員。
因而,我們可以這樣認為,WCF是.NET Framework 3.x的一部分,它包含了用于服務定制、發布與運行以及消息傳遞和處理的運行時環境以及相關類的集合,它提供了在Windows平臺下開發和部署服務的SDK。