WCF體系架構(gòu)基本概念解讀
我們?nèi)绻胍浞值恼莆諔?yīng)用WCF開發(fā)工具,首先需要了解的就是這一工具的一些基本概念。比如今天為大家介紹的WCF體系架構(gòu),就是初學(xué)者們在學(xué)習(xí)過程中需要掌握的一個最基本的概念。#t#
在了解WCF體系架構(gòu)之前,首先需要叩問自己服務(wù)是否需要與非WCF的客戶端交互。如果是,同時客戶端又是舊的MSMQ客戶端,選擇MsmqIntegrationBinding綁定就能夠使得服務(wù)通過MSMQ與該客戶端實(shí)現(xiàn)互操作。如果服務(wù)需要與非WCF客戶端交互,并且該客戶端期望調(diào)用基本的Web服務(wù)協(xié)議(ASMX Web服務(wù)),那么選擇BasicHttpBinding綁定就能夠模擬ASMX Web服務(wù)(即WSI-Basic Profile)公開WCF服務(wù)。缺點(diǎn)是我們無法使用大多數(shù)最新的WS-*協(xié)議的優(yōu)勢。
但是,如果非WCF客戶端能夠識別這些標(biāo)準(zhǔn),就應(yīng)該選擇其中一種WS綁定,例如WSHttpBinding、WSFederationBinding或者WSDualHttpBinding。如果假定客戶端為WCF客戶端,同時需要支持脫機(jī)或斷開狀態(tài)下的交互,則可以選擇NetMsmqBinding使用MSMQ傳輸消息。如果客戶端需要聯(lián)機(jī)通信,但是需要跨機(jī)器邊界調(diào)用,則應(yīng)該選擇NetTcpBinding通過TCP協(xié)議進(jìn)行通信。如果相同機(jī)器上的客戶端同時又是服務(wù),選擇NetNamePipeBinding使用命名管道可以使性能達(dá)到最優(yōu)化。如果基于額外的標(biāo)準(zhǔn),例如回調(diào)(選擇WSDualHttpBinding)或者聯(lián)邦安全(選擇WSFederationBinding),則應(yīng)對選擇的綁定進(jìn)行微調(diào)。
即使超出了使用的目標(biāo)場景,大多數(shù)綁定工作仍然良好。例如,我們可以使用TCP綁定實(shí)現(xiàn)相同機(jī)器甚至進(jìn)程內(nèi)的通信;我們也可以使用基本綁定實(shí)現(xiàn)Intranet中WCF對WCF的通信。
WCF體系架構(gòu)提供了對可靠性、事務(wù)性、并發(fā)管理、安全性以及實(shí)例激活等技術(shù)的有力支持,它們均依賴于基于攔截機(jī)制的WCF體系架構(gòu)。通過代理與客戶端的交互意味著WCF總是處于服務(wù)與客戶端之間,攔截所有的調(diào)用,執(zhí)行調(diào)用前和調(diào)用后的處理。當(dāng)代理將調(diào)用棧幀(Stack Frame)序列化到消息中,并將消息通過通道鏈向下傳遞時,WCF就開始執(zhí)行攔截。
通道相當(dāng)于一個攔截器,目的在于執(zhí)行一個特定的任務(wù)。每個客戶端通道都會執(zhí)行消息的調(diào)用前處理。鏈的組成與結(jié)構(gòu)主要依賴于綁定。例如,一個通道對消息編碼(二進(jìn)制格式、文本格式或者M(jìn)TOM),另一個通道傳遞安全的調(diào)用上下文;還有一個通道傳播客戶端的事務(wù),一個通道管理可靠會話,另一個通道對消息正文(Message Body)加密(如果進(jìn)行了配置),諸如此類??蛻舳说淖詈笠粋€通道是傳輸通道,根據(jù)配置的傳輸方式發(fā)送消息給宿主。
在宿主端,消息同樣通過通道鏈進(jìn)行傳輸,它會對消息執(zhí)行宿主端的調(diào)用前處理。宿主端的第一個通道是傳輸通道,接收傳輸過來的消息。隨后的通道執(zhí)行不同的任務(wù),例如消息正文的解密、消息的解碼、參與傳播事務(wù)、設(shè)置安全準(zhǔn)則、管理會話、激活服務(wù)實(shí)例。宿主端的最后一個通道負(fù)責(zé)將消息傳遞給分發(fā)器(Dispatcher)。分發(fā)器將消息轉(zhuǎn)換到一個棧幀,并調(diào)用服務(wù)實(shí)例。執(zhí)行順序如圖所示。
服務(wù)并不知道它是否被本地客戶端調(diào)用。事實(shí)上,服務(wù)會被本地客戶端——分發(fā)器調(diào)用??蛻舳伺c服務(wù)端的攔截器確保了它們能夠獲得運(yùn)行時環(huán)境,以便于它們執(zhí)行正確的操作。服務(wù)實(shí)例會執(zhí)行調(diào)用,然后將控制權(quán)(Control)返回給分發(fā)器。分發(fā)器負(fù)責(zé)將返回值以及錯誤信息(如果存在)轉(zhuǎn)換為一條返回消息。
分發(fā)器獲得控制權(quán),執(zhí)行的過程則剛好相反:分發(fā)器通過宿主端通道傳遞消息,執(zhí)行調(diào)用后的處理,例如管理事務(wù)、停用實(shí)例、回復(fù)消息的編碼與加密等。為了執(zhí)行客戶端調(diào)用后的處理,包括解密、解碼、提交或取消事務(wù)等任務(wù),傳輸通道會將返回消息發(fā)送到客戶端通道。最后一個通道將消息傳遞給代理。代理將返回消息轉(zhuǎn)化到棧幀,然后將控制權(quán)返回給客戶端。
特別值得注意的是,WCF體系架構(gòu)中的所有要點(diǎn)均與可擴(kuò)展性息息相關(guān)。我們可以為專有交互定制通道,為實(shí)例管理定制行為,以及定制安全行為等。事實(shí)上,WCF提供的標(biāo)準(zhǔn)功能都能夠通過相同的可擴(kuò)展模式實(shí)現(xiàn)。