WCF狀態應用基本概念簡單描述
在WCF開發工具中,對于狀態的應用是一個比較基礎的應用技術。我們需要積累這方面的經驗來達到一個熟練應用的地步。在接下來的文章中,我們首先為大家介紹一下WCF狀態應用的一些基本概念。
WCF狀態應用的設定是由以下兩步完成的,首先要在ServiceContract里面利用參數SessionMode來使Session有效化,具體代碼為
- [ServiceContract(SessionModeSessionMode=SessionMode.Required)];
其次是在ServiceBehavior里面利用參數InstanceContextMode來設定到底使用那一種Session方式,具體代碼如下
- [ServiceBehavior(InstanceContextModeInstanceContextMode=
InstanceContextMode.PerSession);
WCF支持的SessionMode有如下三種:#t#
◆SessionMode.Allowed:默認選項,允許但不強制使用Session。
◆SessionMode.NotAllowed:不允許使用Session。
◆SessionMode.Required:強制使用Session。
WCF支持的InstanceContextMode也有三種:
◆InstanceContextMode.PerCall:為User的每一次調用生成一個SessionID,Session生命周期:調用開始->調用結束。(注:這種方式和不使用Session功能應該是一樣的)
◆InstanceContextMode.PerSession:為每一個用戶生成一個SessionID。Session生命周期:客戶端代理生成->客戶端代理關閉。(這種方式最像原先的Session)
◆InstanceContextMode.Single:生成一個唯一的SessionID,所有用戶共用,生命周期:Host創建->Host關閉。(應用設計模式中的Singleton模式,像原先的Application)
WCF狀態應用的實例是以PerSession為例,當然,這里的Session和原來的Session還是有一些區別的,具體如下:
(1)并沒有一個顯示的Session容器供存放數據用;
(2)Session的銷毀和原先的Session不相同。
WCF中的Session可以在以下三種情況下銷毀:
(a)利用函數銷毀,如文中示例,在函數ReleaseSession()上用[OperationContract(IsTerminating=true)]表明客戶端可以通過調用該函數銷毀Session。
(b)客戶端代理關閉,Session也會自動銷毀。
(c)通過TimeOut時間銷毀,默認是10分鐘,這個時間客戶端和服務器端都可以設定,以較短的時間為有效時間。
因此,個人認為,WCF中的Session的可控性更強一些。
在示例中還有一個問題要注意,在服務器端函數捕捉到異常之后,一定要通過throw new FaultException(ex.Message);的形式將錯誤拋到客戶端,否則的話,客戶端調用用的Channel將會被堵塞,因此就無法繼續調用釋放資源的函數了。
要向客戶端拋異常必須設定WebConfig項,具體代碼如下:
- < configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
- < system.serviceModel>< services>
- < !-- Before deployment, you should remove the returnFaults
behavior configuration to avoid disclosing information in exception messages -->- < service name="MyService" behaviorConfiguration="SessionTrans">
- < endpoint contract="IMyService" binding="wsHttpBinding"/>< /service>
- < /services>< behaviors>
- < serviceBehaviors>
- < behavior name="SessionTrans" returnUnknownExceptionsAsFaults="True">
- < serviceMetadata httpGetEnabled="true" />
- < serviceDebug includeExceptionDetailInFaults="true" />
- < /behavior>< /serviceBehaviors>< /behaviors>< /system.serviceModel>
- < system.web>< compilation debug="true"/>< /system.web>< /configuration>
以上介紹的WCF狀態應用的相關知識供大家學習參考。