WCF服務(wù)基本概念詳解
WCF服務(wù)在實(shí)際應(yīng)用中位開發(fā)人員帶來了不小的幫助。那么如何正確理解這一服務(wù)機(jī)制呢?在這篇文章中,我們將會(huì)通過對(duì)這內(nèi)容的剖析為大家詳細(xì)講解一下相關(guān)應(yīng)用技術(shù),方便大家理解以及應(yīng)用。#t#
什么是WCF服務(wù)
服務(wù)(Services)是公開的一組功能的集合。從軟件設(shè)計(jì)的角度考慮,軟件設(shè)計(jì)思想經(jīng)歷了從函數(shù)發(fā)展到對(duì)象,從對(duì)象發(fā)展到組件,再從組件發(fā)展到服務(wù)的幾次變遷。在這樣一個(gè)漫長的發(fā)展旅程中,最后發(fā)展到服務(wù)的一步可以說是最具革新意義的一次飛躍。面向服務(wù)(Service-Orientation,SO)是一組原則的抽象,是創(chuàng)建面向服務(wù)應(yīng)用程序的最佳實(shí)踐。如果你不熟悉面向服務(wù)的原則,可以參見附錄A,它介紹了使用面向服務(wù)的概況與目的。本書假定你對(duì)這些原則已經(jīng)了然于胸。一個(gè)面向服務(wù)應(yīng)用程序(SOA)將眾多服務(wù)聚集到單個(gè)邏輯的應(yīng)用程序中,這就類似于面向組件的應(yīng)用程序聚合組件,或者面向?qū)ο蟮膽?yīng)用程序聚合對(duì)象,如圖1-1所示。
圖1-1:面向服務(wù)應(yīng)用程序
服務(wù)可以是本地的,也可以是遠(yuǎn)程的,可以由多個(gè)參與方使用任意技術(shù)進(jìn)行開發(fā)。服務(wù)與版本無關(guān),甚至可以在不同的時(shí)區(qū)同時(shí)執(zhí)行。服務(wù)內(nèi)部包含了諸如語言、技術(shù)、平臺(tái)、版本與框架等諸多概念,而服務(wù)之間的交互,則只允許指定的通信模式。
WCF服務(wù)的客戶端只是使用服務(wù)功能的一方。理論上講,客戶端可以是任意的Windows窗體類、ASP.NET頁面或其他服務(wù)。
客戶端與服務(wù)通過消息的發(fā)送與接收進(jìn)行交互。消息可以直接在客戶端與服務(wù)之間進(jìn)行傳遞,也可以通過中間方進(jìn)行傳遞。WCF中的所有消息均為SOAP消息。注意WCF的消息與傳輸協(xié)議無關(guān),這與Web服務(wù)不同。因此,WCF服務(wù)可以在不同的協(xié)議之間傳輸,而不僅限于HTTP。WCF客戶端可以與非WCF服務(wù)完成互操作,而WCF服務(wù)也可以與非WCF客戶端交互。不過,如果需要同時(shí)開發(fā)客戶端與服務(wù),則創(chuàng)建的應(yīng)用程序兩端都要求支持WCF,這樣才能利用WCF的特定優(yōu)勢(shì)。
因?yàn)榉?wù)的創(chuàng)建對(duì)于外界而言是不透明的,所以WCF服務(wù)通常通過公開元數(shù)據(jù)(Metadata)的方式描述可用的功能以及服務(wù)可能采用的通信方式。元數(shù)據(jù)的發(fā)布可以預(yù)先定義,它與具體的技術(shù)無關(guān)(Technology-Neutral),例如采用基于HTTP-GET方式的WSDL,或者符合元數(shù)據(jù)交換的行業(yè)標(biāo)準(zhǔn)。一個(gè)非WCF客戶端可以將元數(shù)據(jù)作為本地類型導(dǎo)入到本地環(huán)境中。相似的,WCF客戶端也可以導(dǎo)入非WCF服務(wù)的元數(shù)據(jù),然后以本地CLR類與接口的方式進(jìn)行調(diào)用。
WCF服務(wù)的執(zhí)行邊界
WCF不允許客戶端直接與服務(wù)交互,即使它調(diào)用的是本地機(jī)器內(nèi)存中的服務(wù)。相反,客戶端總是使用代理(Proxy)將調(diào)用轉(zhuǎn)發(fā)給服務(wù)。代理公開的操作與服務(wù)相同,同時(shí)還增加了一些管理代理的方法。
WCF允許客戶端跨越執(zhí)行邊界與服務(wù)通信。在同一臺(tái)機(jī)器中,客戶端可以調(diào)用同一個(gè)應(yīng)用程序域中的WCF服務(wù),也可以在同一進(jìn)程中跨應(yīng)用程序域調(diào)用,甚至跨進(jìn)程調(diào)用。