一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

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

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

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)建的問(wèn)題。本文就進(jìn)一步的探索WCF中遠(yuǎn)程對(duì)象的創(chuàng)建模式和其生命周期

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

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

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

本文適合的讀者

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

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

WCF中有三種實(shí)例模式,這在.NET Framework中已經(jīng)用InstanceContextMode枚舉具體的列了出來(lái),它們分別為: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ì)過(guò)期,此時(shí)服務(wù)對(duì)象銷毀。

Single

Single模式工作流程如下:

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

PerSession

正如上面對(duì)PerCall的描述所說(shuō),PerSession與傳統(tǒng)的C/S模式應(yīng)用程序非常相似,它能在服務(wù)端和客戶端維護(hù)狀態(tài),當(dāng)一個(gè)服務(wù)對(duì)象創(chuàng)建之后不會(huì)馬上銷毀,而是等待客戶端再次來(lái)消費(fèi)它,那這種的壞處也說(shuō)過(guò)了,可能會(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ū)人可不少,僧多飯少,你說(shuō)咱進(jìn)去得排隊(duì)吧。人家理發(fā)的時(shí)候,咱就得邊上看著,得人家都整完了,嘿,咱就洗頭,理發(fā),吹風(fēng)來(lái)個(gè)一條龍。Single模式就像上面提到的小區(qū)理發(fā)店,人家從早晨一開(kāi)業(yè),理發(fā)師就給你準(zhǔn)備好了,您也甭挑蹦撿。伺候完你,他再伺候別人,為何要這么做?其實(shí)道理也很簡(jiǎn)單,如果理發(fā)師不喝水,不吃飯,不用管食宿,不用工錢,不會(huì)唧唧歪歪,那理發(fā)店老板娘肯定請(qǐng)1萬(wàn)個(gè)過(guò)來(lái)。可現(xiàn)實(shí)不是那樣子的,是這些理發(fā)師都要吃喝拉撒睡,還要拿俸祿,就一個(gè)幾十平米的小理發(fā)店,估計(jì)給老板娘賣了也不夠他們的呢。

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

  1. 對(duì)于PerCall模式,一定要記住,如果服務(wù)對(duì)象中的數(shù)據(jù)沒(méi)有固化,并且不是靜態(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,那如果客戶端長(zhǎng)時(shí)間不與服務(wù)端聯(lián)系,達(dá)到服務(wù)端最大忍耐限度,服務(wù)端也會(huì)變心。
  3. 對(duì)于Single模式,既然例外就它老哥一個(gè),就簡(jiǎn)單得多了,它能保持服務(wù)對(duì)象中的非靜態(tài)全局變量。但是特別要注意的是,如果在這種模式下的話,要特別注意線程安全的問(wèn)題,讓10個(gè)人同時(shí)讓一個(gè)理發(fā)師傅來(lái)服務(wù)。

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

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

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

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

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

再回過(guò)頭來(lái)看服務(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)載需保留來(lái)源!

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

主站蜘蛛池模板: 久久五月激情婷婷日韩 | 欧美亚洲高清日韩成人 | 色婷婷亚洲精品综合影院 | 色多多免费视频 | 成人在免费观看视频国产 | 99xxoo视频在线永久免费观看 | 亚洲第一区视频在线观看 | 福利精品视频 | 国产精品一区二区久久不卡 | 午夜在线免费视频 | 夜夜穞狠狠穞 | 国产高清在线精品一区二区三区 | wwwav视频| 四虎在线最新永久免费 | 亚洲大尺度视频 | 国产成人精品一区二区仙踪林 | 国产一级毛片午夜福 | 亚洲日本中文字幕在线2022 | 成人啪精品视频免费网站 | 国产精品久久久福利 | 亚洲福利三区 | 四虎永久在线免费观看 | 国产乱子视频 | 草草在线免费视频 | 亚洲国产视频网站 | 久久www免费人成精品 | 久久激情小说 | 婷婷激情五月 | 69视频在线 | 色综合一区二区三区 | 夜夜未满十八勿进的爽爽影院 | 美女毛片儿| 风间由美一区二区播放合集 | 国产精品久草 | 大香伊人久久 | 综合久久久久久中文字幕 | 国内自拍视频在线看免费观看 | 好吊妞视频免费观看va | 一区二区三区四区在线播放 | 亚洲男人的天堂久久香蕉 | 久久久噜久噜久久综合 |