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

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