關於WCF的InstanceContextMode,與會話相關

並不是所有Binding支持會話(session)功能。

比如basicHTTP就不支持session功能。

參考文章:

http://www.codeproject.com/Articles/86007/ways-to-do-WCF-instance-management-Per-call-Per

另外參考以下文字:

以下文字來自http://www.cnblogs.com/TivonStone/archive/2011/05/18/2050407.html

SessionMode:設置會話的模式(默認情況下是Allowed)
是客戶端代理與服務器之間的會話模式,同樣也有三種類型:Allowed-允許會話、NotAllowed-不允許會話、Required-要求會話(需要有支持會話的Binding支持,WsHttpBinding、NetTcpBinding等)

若要設計一個會話契約,我們建議使用Required 方式,而不是默認值Allowed

SessionMode.Required值要求必須使用傳輸層會話,但應用層會話卻不是必要的,如果服務終結點的綁定沒有維持一個傳輸層會話,就不能爲這樣的服務契約配置SessionMode.Required。這一約束條件會在裝載服務時進行驗證。但是,我們仍然可以將服務配置爲單調服務,服務實例會在每次客戶端調用期間創建與銷燬實例。只有當服務被配置爲會話服務時,服務實例纔會存活於整個客戶端會話中。

InstanceContextMode:指定可用來處理包含在傳入信息中的調用的服務實例數(默認情況下是PerSession)

爲服務端實現服務契約類的實例模式,有三種類型,分別爲:

PerCall-每次服務操作調用創建一次,調用完後進行銷燬;

PerSession-同一個會話期間創建一次,客戶端代理第一次操作(IsInitiating = true)調用創建,調用代理的Close方法銷燬或者調用IsTerminating服務操作銷燬;

Single-服務只會創建一次,服務開始時創建,服務完成時銷燬

(順便說一下,Session的支持是通過建立Sessionful Channel來實現的,但是並不是所有的Binding都支持Session,比如BasicHttpBinding就不支持Session)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章