中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

WCF從理論到實(shí)踐(9):實(shí)例模式和對(duì)象生命周期

系列文章導(dǎo)航:

WCF從理論到實(shí)踐(1):揭開神秘面紗

WCF從理論到實(shí)踐(2):決戰(zhàn)紫禁之巔

WCF從理論到實(shí)踐(3):八號(hào)當(dāng)鋪之黑色契約

WCF從理論到實(shí)踐(4):路在何方

WCF從理論到實(shí)踐(5):Binding細(xì)解

WCF從理論到實(shí)踐(6):WCF架構(gòu)

WCF從理論到實(shí)踐(7):消息交換模式

WCF從理論到實(shí)踐(8):事件廣播

WCF從理論到實(shí)踐(9):實(shí)例模式和對(duì)象生命周期

WCF從理論到實(shí)踐(10):異常處理

WCF從理論到實(shí)踐(11)-異步

WCF從理論到實(shí)踐(12):事務(wù)

WCF從理論到實(shí)踐(13):事務(wù)投票

WCF從理論到實(shí)踐(14):WCF解決方案模板

WCF從理論到實(shí)踐(15):響應(yīng)變化

WCF從理論到實(shí)踐(16):操作重載(帶視頻+ppt+源碼)

WCF從理論到實(shí)踐(17):OO大背離(帶視頻+ppt+源碼)


在上文WCF從理論到實(shí)踐:事件廣播 中,已經(jīng)實(shí)現(xiàn)了完整的WCF服務(wù)端和客戶端示例,其中也涉及到了遠(yuǎn)程對(duì)象實(shí)例創(chuàng)建的問題。本文就進(jìn)一步的探索WCF中遠(yuǎn)程對(duì)象的創(chuàng)建模式和其生命周期

本文出發(fā)點(diǎn):

通過閱讀本文,您可以了解以下知識(shí):

  1. WCF中有哪幾種對(duì)象實(shí)例模式?
  2. 幾種實(shí)例模式下對(duì)象的生命周期?
  3. 各種實(shí)例模式的應(yīng)用場(chǎng)合?
  4. 使用不同的實(shí)例模式,需要注意的有哪些?
  5. 代碼不騙人,用一個(gè)小范例來看看不同實(shí)例模式的區(qū)別?

本文適合的讀者

本文適合有一定WCF基礎(chǔ)知識(shí)的初學(xué)者

WCF中有哪幾種對(duì)象實(shí)例創(chuàng)建模式?

WCF中有三種實(shí)例模式,這在.NET Framework中已經(jīng)用InstanceContextMode枚舉具體的列了出來,它們分別為:PerSession,PerCall,Single

幾種實(shí)例模式下對(duì)象的生命周期?

PerCall

PerCall模式工作流程如下

  1. 客戶端創(chuàng)建代理對(duì)象(Proxy)
  2. 客戶端調(diào)用代理對(duì)象的一個(gè)契約操作,代理對(duì)象將其傳遞給服務(wù)宿主程序。
  3. 宿主應(yīng)用程序創(chuàng)建一新的服務(wù)契約對(duì)象,并且執(zhí)行請(qǐng)求操作
  4. 在執(zhí)行完請(qǐng)求操作后,如果要求有應(yīng)答,那么服務(wù)契約會(huì)給代理對(duì)象一個(gè)應(yīng)答,然后銷毀自己(如果實(shí)現(xiàn)了IDisposable,則調(diào)用Dispose())。

PerSession

PerSession模式工作的流程如下:

  1. 客戶端創(chuàng)建代理對(duì)象(Proxy)
  2. 客戶端第一次調(diào)用代理對(duì)象的一個(gè)契約操作,代理對(duì)象將其調(diào)用請(qǐng)求傳遞給服務(wù)宿主
  3. 宿主程序創(chuàng)建新的服務(wù)對(duì)象,并執(zhí)行請(qǐng)求操作,如果有必要,返回客戶端應(yīng)答
  4. 客戶端再次發(fā)出調(diào)用操作的請(qǐng)求,宿主會(huì)先判斷是否已有建立好的會(huì)話,如果存在,則不需要再創(chuàng)建新的服務(wù)對(duì)象,直接使用老對(duì)象即可。
  5. 在時(shí)間達(dá)到指定要求或者因一些特殊原因,會(huì)話會(huì)過期,此時(shí)服務(wù)對(duì)象銷毀。

Single

Single模式工作流程如下:

  1. 服務(wù)端啟動(dòng),同時(shí)創(chuàng)建服務(wù)對(duì)象
  2. 客戶端通過代理調(diào)用契約操作
  3. 第一步中創(chuàng)建的服務(wù)對(duì)象接受請(qǐng)求 ,并執(zhí)行操作,進(jìn)行必要的應(yīng)答
  4. 第一步創(chuàng)建的服務(wù)對(duì)象將一直保留
  5. 服務(wù)關(guān)閉,第一步創(chuàng)建的對(duì)象銷毀

各種實(shí)例模式的應(yīng)用場(chǎng)合?

PerCall

在傳統(tǒng)模式C/S模式的應(yīng)用程序中,通常情況下存在這樣的問題:客戶端請(qǐng)求服務(wù)端之后,服務(wù)端并不是馬上對(duì)處理客戶端請(qǐng)求時(shí)需要的資源進(jìn)行釋放,服務(wù)端往往自作多情的認(rèn)為客戶端一定是個(gè)老主顧,會(huì)時(shí)不時(shí)來消費(fèi)一番。可他卻沒想到,有的時(shí)候,客戶端是個(gè)昧良心的家伙,就算服務(wù)端再怎么獻(xiàn)殷勤,客戶端也不買賬。而對(duì)于一些非常珍貴的資源,比如數(shù)據(jù)庫連接,文件,圖像,通訊端口等。服務(wù)這種做法往往會(huì)使這些資源長期被不來消費(fèi)的客戶端空閑占用,當(dāng)有新的請(qǐng)求真正要用使用他們的時(shí)候,卻因?yàn)橘Y源耗盡而無法處理。這樣對(duì)服務(wù)端就得不償失了,而PerCall就是對(duì)上面提到問題的一種解決方案。它采用類似快餐式的經(jīng)營方式,當(dāng)一個(gè)請(qǐng)求操作來到的時(shí)候,再創(chuàng)建服務(wù)對(duì)象,申請(qǐng)必要資源,而當(dāng)操作完畢之后,立即銷毀對(duì)象并釋放資源,留給下一個(gè)請(qǐng)求。這就可能大大提高服務(wù)端的吞吐能力。而且WCF中默認(rèn)的實(shí)例創(chuàng)建模式就是這種。

PerSession

正如上面對(duì)PerCall的描述所說,PerSession與傳統(tǒng)的C/S模式應(yīng)用程序非常相似,它能在服務(wù)端和客戶端維護(hù)狀態(tài),當(dāng)一個(gè)服務(wù)對(duì)象創(chuàng)建之后不會(huì)馬上銷毀,而是等待客戶端再次來消費(fèi)它,那這種的壞處也說過了,可能會(huì)浪費(fèi)寶貴的服務(wù)資源,可它也是有好處的。比如它能夠保持連接和維護(hù)狀態(tài),這在要求有回調(diào)的情況下特別重要,因?yàn)槿绻?wù)端連哪個(gè)家伙點(diǎn)的菜都忘記了怎么為客人上菜呢?還有一種情況,服務(wù)端操作不需要比較多的資源或者占用的資源也不寶貴的情況下,而卻與客戶端在不同的網(wǎng)絡(luò)中,它們之間進(jìn)行一次連接可費(fèi)了老勁,這時(shí)也適用于此種實(shí)例模式。

Single

大家經(jīng)常去理發(fā)吧?去那大的理發(fā)店,里面的理發(fā)師這家伙這個(gè)多,你隨便找個(gè)就能幫你料理了,可兄弟我比較窮酸,每次都去小區(qū)理發(fā)店,里面連洗頭,在理發(fā)就1位師傅,小區(qū)人可不少,僧多飯少,你說咱進(jìn)去得排隊(duì)吧。人家理發(fā)的時(shí)候,咱就得邊上看著,得人家都整完了,嘿,咱就洗頭,理發(fā),吹風(fēng)來個(gè)一條龍。Single模式就像上面提到的小區(qū)理發(fā)店,人家從早晨一開業(yè),理發(fā)師就給你準(zhǔn)備好了,您也甭挑蹦撿。伺候完你,他再伺候別人,為何要這么做?其實(shí)道理也很簡(jiǎn)單,如果理發(fā)師不喝水,不吃飯,不用管食宿,不用工錢,不會(huì)唧唧歪歪,那理發(fā)店老板娘肯定請(qǐng)1萬個(gè)過來。可現(xiàn)實(shí)不是那樣子的,是這些理發(fā)師都要吃喝拉撒睡,還要拿俸祿,就一個(gè)幾十平米的小理發(fā)店,估計(jì)給老板娘賣了也不夠他們的呢。

使用不同的實(shí)例模式,需要注意的有哪些?

  1. 對(duì)于PerCall模式,一定要記住,如果服務(wù)對(duì)象中的數(shù)據(jù)沒有固化,并且不是靜態(tài)變量,那它每次操作都會(huì)被重新初始化。
  2. 對(duì)于PerSession模式,第一要清楚有些Binding是不能用于此種模式的,具體什么可用,什么不能用,可以查閱http://www.cnblogs.com/jillzhang/archive/2008/02/03/1063406.html 。另外,PerSession模式并不是代表狀態(tài)會(huì)自動(dòng)維護(hù),那些被設(shè)置了IsTerminating=True的操作完成的時(shí)候,也會(huì)釋放資源和銷毀對(duì)象。即使不是Ture,那如果客戶端長時(shí)間不與服務(wù)端聯(lián)系,達(dá)到服務(wù)端最大忍耐限度,服務(wù)端也會(huì)變心。
  3. 對(duì)于Single模式,既然例外就它老哥一個(gè),就簡(jiǎn)單得多了,它能保持服務(wù)對(duì)象中的非靜態(tài)全局變量。但是特別要注意的是,如果在這種模式下的話,要特別注意線程安全的問題,讓10個(gè)人同時(shí)讓一個(gè)理發(fā)師傅來服務(wù)。

代碼不騙人,用一個(gè)小范例來看看不同實(shí)例模式的區(qū)別?

寫了一個(gè)簡(jiǎn)單的范例,來驗(yàn)證和說明上述的觀點(diǎn),下面就先看一下最后的運(yùn)行效果:

服務(wù)端運(yùn)行效果解圖:

從上面的解圖可以看出,在服務(wù)啟動(dòng)的時(shí)候,也就是宿主ServiceHost.Open()的時(shí)候,便已經(jīng)創(chuàng)建了Single模式的服務(wù)對(duì)象實(shí)例

客戶端運(yùn)行效果截圖:

再回過頭來看服務(wù)端效果:

本文參考資料

  1. http://msdn2.microsoft.com/zh-cn/magazine/cc163590(en-us).ASPx

本文范例項(xiàng)目文件:

 /Files/jillzhang/Jillzhang.InstanceCtxMode.rar

NET技術(shù)WCF從理論到實(shí)踐(9):實(shí)例模式和對(duì)象生命周期,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久久久久国产精品免费免费男同 | 色综合一区二区 | 久草在线免费资源 | 亚洲欧美一区二区三区在线 | 日韩av免费在线电影 | 狠狠爱免费视频 | 99一级毛片 | 午夜欧美日韩 | www.天天操.com | 精品日韩在线观看 | 国产精品视频免费看 | 日韩一区二区久久 | 久久精品国产99国产 | www.se91 | 在线欧美 | 欧美精品一区在线发布 | 精品日韩一区 | 久久精品久久精品久久精品 | 久草99 | 国产黄色在线观看 | 亚洲精品一| 欧美日韩在线精品 | 亚洲欧美视频一区 | 成年免费大片黄在线观看一级 | 亚洲精品99 | 麻豆av电影网| 亚洲成人av| 亚洲国产精品第一区二区 | 国产日韩欧美 | 九色视频网站 | 免费网站国产 | 97超碰成人| 亚洲精品大片 | 欧美亚洲视频在线观看 | 一区二区三区不卡视频 | 九九亚洲 | 日日骚视频 | 成人妇女免费播放久久久 | 国产美女一区二区 | 一区二区免费在线视频 | 日韩欧美高清dvd碟片 |