並不是所有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)