天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

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

系列文章導航:

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

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

WCF從理論到實踐(3):八號當鋪之黑色契約

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

WCF從理論到實踐(5):Binding細解

WCF從理論到實踐(6):WCF架構

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

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

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

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

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

WCF從理論到實踐(12):事務

WCF從理論到實踐(13):事務投票

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

WCF從理論到實踐(15):響應變化

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

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


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

本文出發(fā)點:

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

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

本文適合的讀者

本文適合有一定WCF基礎知識的初學者

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

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

幾種實例模式下對象的生命周期?

PerCall

PerCall模式工作流程如下

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

PerSession

PerSession模式工作的流程如下:

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

Single

Single模式工作流程如下:

  1. 服務端啟動,同時創(chuàng)建服務對象
  2. 客戶端通過代理調用契約操作
  3. 第一步中創(chuàng)建的服務對象接受請求 ,并執(zhí)行操作,進行必要的應答
  4. 第一步創(chuàng)建的服務對象將一直保留
  5. 服務關閉,第一步創(chuàng)建的對象銷毀

各種實例模式的應用場合?

PerCall

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

PerSession

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

Single

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

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

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

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

寫了一個簡單的范例,來驗證和說明上述的觀點,下面就先看一下最后的運行效果:

服務端運行效果解圖:

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

客戶端運行效果截圖:

再回過頭來看服務端效果:

本文參考資料

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

本文范例項目文件:

 /Files/jillzhang/Jillzhang.InstanceCtxMode.rar

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

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

主站蜘蛛池模板: 美女胸禁止18以下看 | 特级做A爰片毛片免费看108 | 16女下面流水不遮图免费观看 | 国产精品手机在线视频 | 伊人国产视频 | 欧美性色xo影院69 | p影院永久免费 | 九九热精品视频在线观看 | 免费在线观看黄色网址 | 多男同时插一个女人8p | 国产免费啪嗒啪嗒视频看看 | 日本亚欧热亚洲乱色视频 | 久久热免费观看视频 | 三级黄色a | 思思99热久久精品在线6 | 黑人性xxx | 国产特级毛片AAAAAAA高清 | 久久国产高清字幕中文 | 最近2019年日本中文免费字幕 | 国产美熟女乱又伦AV | 国产精品一区第二页 | 亚洲 欧洲 国产 日产 综合 | 少妇无套内谢久久久久 | 花蝴蝶在线观看免费8 | 琪琪see色原网色原网站 | 扒开 浓密 毛 | 欧美最猛黑人XXXXWWW | 亚洲国产成人99精品激情在线 | 亚洲AV蜜桃永久无码精品红樱桃 | 受被三个攻各种道具PLAY | 国产精品自在拍在线播放 | 甜性涩爱在线播放 | 天天综合网网欲色 | 中文字幕免费视频精品一 | 亚洲视频在线免费 | 久久偷拍vs国产在线播放 | 亚洲一区精品在线 | 99精品久久久久久久 | 一本之道高清在线观看一区 | 艳鉧动漫片1~6全集在线 | 国产精品久久人妻无码网站一区无 |