-----------------------------------------實例模型:
1.InstanceContentextMode:
-------PerCall(單調(diào)):無狀態(tài),每次調(diào)用之間都是獨立的,沒有關(guān)系;
為每個調(diào)用創(chuàng)建新的對象(全新的service);增加了整體吞吐量,內(nèi)存開銷少(服務(wù)用時創(chuàng)建,不用時銷毀),不會產(chǎn)生并發(fā);
若服務(wù)對象創(chuàng)建需要較長時間,就要考慮放棄這種方式;
聲明方式:
在實現(xiàn)接口的服務(wù)上添加標(biāo)簽
?[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
-----PerSession(系統(tǒng)缺省 會話):有狀態(tài)(指的是一個session內(nèi)部,session和session之間沒有聯(lián)系),每次調(diào)用具有相關(guān)的連續(xù)性,比如給一個變量賦值為1,那么第二次調(diào)用,變量值依
?
然為1;
單個client,單個session內(nèi)部,數(shù)據(jù)是共享的;,第一次調(diào)用和第二次調(diào)用是同一服務(wù);單不同client或不同session,是獨立的;
內(nèi)存開銷大,引發(fā)多線程并發(fā);
不支持basichttpbinding;其他綁定差不多都支持;
可以配置對話(控制session):sessionMode:Allowed(缺省)如果binding為basichttpbinding,會強制改為percall,因為不支持;,
notallowed:當(dāng)前wcf對象服務(wù)不支持會話,required:強制使用會話,若組合為Persession+basichttpBinding,就會剖出異常了,推薦使用notallowed和required;
會話的聲明:
在契約上添加聲明:? ?
[ServiceContract(SessionMode=SessionMode.Allowed)]
public interface Iguo
-----Single(單件模型):整個wcf在整個生命周期所有對象都是有狀態(tài)的,對象可以在不同的session之間共享;
只有一個servie,類似單例模式吧,所有會話之間相互影響,內(nèi)存開銷大,引發(fā)并發(fā);
----------session(會話):傳輸會話,可靠性會話,安全會話,應(yīng)用程序會話;
wcf會話有客戶端發(fā)起;sessionId:任何形式的會話都會生成會話信道,會話id將消息與信道關(guān)聯(lián);
sessionServiceClient proxy=new sessionServiceClient();
string s=proxy.innerChannel.sessionId;
---會話生命周期;通過配置文件進(jìn)行配置:receiveTimeOut
<netTcpBinding>
? <binding name="netTcp" receiveTimeOut="00:10:00"/>
</netTcpBinding>
---
[PerationContract(IsInitiating=false,IsTerminating=false)]
IsInitiating=true,:是否創(chuàng)建一個會話;
IsTerminating=false:是否結(jié)束一個會話,為true的話,在周期范圍內(nèi)也會清理,提高性能;
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
