WCF架構(gòu)基于攔截特性分析
到目前為止,對(duì)WCF了解的人越來(lái)越多,我也不是個(gè)例外,對(duì)它的體系結(jié)構(gòu)我也是很了解的,下面的內(nèi)容就是講解WCF架構(gòu)的。WCF為可靠性、事務(wù)、安全和實(shí)例激活等提供了極其寶貴的支持,所有這些都依賴(lài)于WCF基于攔截的架構(gòu)。讓客戶(hù)端與代理交互意味著,WCF總是介于服務(wù)和客戶(hù)端之間來(lái)攔截調(diào)用并且執(zhí)行預(yù)調(diào)用和調(diào)用后處理。當(dāng)代理把調(diào)用堆棧幀串行化為一條消息并且沿著一個(gè)通道鏈發(fā)送消息時(shí),該解釋即開(kāi)始。
#T#每一個(gè)客戶(hù)端通道都要做消息的預(yù)調(diào)用處理。這個(gè)鏈的正確結(jié)構(gòu)和組成在很大程度上依賴(lài)于綁定。例如,其中一個(gè)通道負(fù)責(zé)編碼該消息(二進(jìn)制,文本或MTOM),一個(gè)通道負(fù)責(zé)傳遞安全調(diào)用上下文,一個(gè)通道負(fù)責(zé)傳播客戶(hù)端事務(wù),一個(gè)通道負(fù)責(zé)管理可靠的會(huì)話(huà),一個(gè)通道負(fù)責(zé)加密消息正文(如果這樣配置的話(huà)),等等??蛻?hù)端的最后一個(gè)通道是傳輸通道,它負(fù)責(zé)把消息由經(jīng)配置的傳輸傳送到宿主。
在宿主端,該消息也經(jīng)過(guò)一個(gè)通道鏈,從而實(shí)現(xiàn)宿主端消息的預(yù)調(diào)用處理。在宿主端的第一個(gè)通道是傳輸通道,它接收來(lái)自傳輸?shù)南?。隨后的通道執(zhí)行各種任務(wù),例如解密消息正文、譯解消息、把傳播的事務(wù)設(shè)置到執(zhí)行線程、設(shè)置安全主管、管理會(huì)話(huà)和激活服務(wù)實(shí)例。最后一個(gè)通道在宿主端把該消息傳遞到調(diào)度器。由調(diào)度器把該消息值的轉(zhuǎn)換成一個(gè)堆棧幀并且調(diào)用服務(wù)實(shí)例。圖描述了這一順序。
圖:WCF架構(gòu)看上去的樣子。
在客戶(hù)端和服務(wù)端的攔截都要確??蛻?hù)端和服務(wù)得到它們所要求的運(yùn)行時(shí)刻環(huán)境以便正確運(yùn)行。由服務(wù)實(shí)例執(zhí)行該調(diào)用并且把控制返回到調(diào)度器,由它把返回值和錯(cuò)誤信息(如果有的話(huà))轉(zhuǎn)換成一條返回消息?,F(xiàn)在,整個(gè)過(guò)程被顛倒:調(diào)度器通過(guò)宿主端通道傳送消息以執(zhí)行調(diào)用后處理,例如管理事務(wù)、撤銷(xiāo)實(shí)例、編碼應(yīng)答信息、加密它,等等。返回的消息轉(zhuǎn)到傳輸通道,在此把消息發(fā)送到客戶(hù)端通道以便客戶(hù)端調(diào)用后處理:解密,編碼,提交或取消事務(wù),等等。
由代理把返回的消息轉(zhuǎn)換成一個(gè)堆棧幀并且把控制返回到客戶(hù)端。最值得注意的是,在這個(gè)WCF架構(gòu)中的幾乎所有的點(diǎn)都提供了可擴(kuò)展性鉤子-你可以為專(zhuān)利性行為提供定制通道,定制實(shí)例管理或定制安全。事實(shí)上,WCF提供的這些標(biāo)準(zhǔn)工具都是使用相同的可擴(kuò)展性模型實(shí)現(xiàn)的。