日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

WinVista新技術(shù) WCF開發(fā)指南之客戶端開發(fā)( 三 )



每一個客戶端通道都要做消息的預(yù)調(diào)用處理 。這個鏈的正確結(jié)構(gòu)和組成在很大程度上依賴于綁定 。例如 , 其中一個通道負(fù)責(zé)編碼該消息(二進(jìn)制 , 文本或MTOM) , 一個通道負(fù)責(zé)傳遞安全調(diào)用上下文 , 一個通道負(fù)責(zé)傳播客戶端事務(wù) , 一個通道負(fù)責(zé)管理可靠的會話 , 一個通道負(fù)責(zé)加密消息正文(如果這樣配置的話) , 等等 ??蛻舳说淖詈笠粋€通道是傳輸通道 , 它負(fù)責(zé)把消息由經(jīng)配置的傳輸傳送到宿主 。

在宿主端 , 該消息也經(jīng)過一個通道鏈 , 從而實(shí)現(xiàn)宿主端消息的預(yù)調(diào)用處理 。在宿主端的第一個通道是傳輸通道 , 它接收來自傳輸?shù)南?。隨后的通道執(zhí)行各種任務(wù) , 例如解密消息正文、譯解消息、把傳播的事務(wù)設(shè)置到執(zhí)行線程、設(shè)置安全主管、管理會話和激活服務(wù)實(shí)例 。最后一個通道在宿主端把該消息傳遞到調(diào)度器 。由調(diào)度器把該消息值的轉(zhuǎn)換成一個堆棧幀并且調(diào)用服務(wù)實(shí)例 。圖8描述了這一順序 。


圖8:WCF架構(gòu)看上去的樣子 。
在客戶端和服務(wù)端的攔截都要確??蛻舳撕头?wù)得到它們所要求的運(yùn)行時刻環(huán)境以便正確運(yùn)行 。由服務(wù)實(shí)例執(zhí)行該調(diào)用并且把控制返回到調(diào)度器 , 由它把返回值和錯誤信息(如果有的話)轉(zhuǎn)換成一條返回消息 。現(xiàn)在 , 整個過程被顛倒:調(diào)度器通過宿主端通道傳送消息以執(zhí)行調(diào)用后處理 , 例如管理事務(wù)、撤銷實(shí)例、編碼應(yīng)答信息、加密它 , 等等 。返回的消息轉(zhuǎn)到傳輸通道 , 在此把消息發(fā)送到客戶端通道以便客戶端調(diào)用后處理:解密 , 編碼 , 提交或取消事務(wù) , 等等 。

由代理把返回的消息轉(zhuǎn)換成一個堆棧幀并且把控制返回到客戶端 。最值得注意的是 , 在這個架構(gòu)中的幾乎所有的點(diǎn)都提供了可擴(kuò)展性鉤子-你可以為專利性行為提供定制通道 , 定制實(shí)例管理或定制安全 。事實(shí)上 , WCF提供的這些標(biāo)準(zhǔn)工具都是使用相同的可擴(kuò)展性模型實(shí)現(xiàn)的 。

六. 使用通道

你可以直接使用通道來調(diào)用服務(wù)上的操作而甚至不必依賴于一個SvcUtil生成的代理 。顯示于列表10(見本文相應(yīng)下載源碼)中的ChannelFactory<T>類能夠使你任意地創(chuàng)建一個代理 。你需要提供給它的構(gòu)造器端點(diǎn)信息-或者是來自配置文件的端點(diǎn)名 , 或者是綁定和地址對象 , 或者是一個端點(diǎn)對象 。然后 , 使用CreateChannel()方法以獲得一個到代理的參考(頂級通道)并且使用它的方法 。最后 , 關(guān)閉該代理或者通過把它強(qiáng)制轉(zhuǎn)換為一個IDisposable接口并且調(diào)用其Dispose()方法或強(qiáng)制轉(zhuǎn)換為一個IClIEntChannel接口并且調(diào)用其Close()方法:

ChannelFactory<IMyContract> factory;
//使用默認(rèn)的站點(diǎn)
factory = new ChannelFactory<IMyContract>("");
IMyContract proxy1 = factory.CreateChannel();
using(proxy1 as IDisposable)
{
proxy1.MyMethod();
}
IMyContract proxy2 = factory.CreateChannel();
proxy2.MyMethod();
IClientChannel clientChannel = proxy2 as IClientChannel;
Debug.Assert(clientChannel != null);
clientChannel.Close();
七. 總結(jié)

WCF是一種用于構(gòu)建Windows面向服務(wù)的應(yīng)用程序的SDK 。它能夠讓你使用杰出的CLR編程結(jié)構(gòu)(例如類和接口)來發(fā)布和消費(fèi)服務(wù) 。這種編程模型是聲明性的并且大部分是屬性驅(qū)動的 。WCF基于攔截的架構(gòu)提供了內(nèi)置的工具用于管理服務(wù)的許多運(yùn)行時刻方面;并且 , 從其應(yīng)用前景來看 , 它也是構(gòu)建Windows分布式應(yīng)用程序的最具生產(chǎn)效率的方式 。

WCF的第一個發(fā)行版本為開發(fā)服務(wù)(例如宿主 , 服務(wù)實(shí)例管理 , 異步調(diào)用 , 可靠性 , 事務(wù)管理 , 非連接性隊列調(diào)用和安全性)提供了許多有用的工具 。在WCF的第二個發(fā)行版本中將添加服務(wù)發(fā)現(xiàn)以及事件出版和訂閱 。WCF要求.NET 2.0環(huán)境并將同Windows Vista一同發(fā)行 。另外 , 你可以在Windows XP SP2和Windows Server 2003 SP1環(huán)境下使用它 。

推薦閱讀