透過 [ServiceBehavior(InstanceContextMode)] 設定:
wsHttpBinding + reliableSession)。[ServiceContract(Name="IBehaverContract", SessionMode=SessionMode.Required)]
public interface IBehaverContract {
[OperationContract] string TestBehavor();
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)] // 或 PerSession / Single
public class BehaverContract : IBehaverContract, IDisposable {
private int _count = 0;
public BehaverContract() { Console.WriteLine("建構"); }
public string TestBehavor() { _count++; return $"The number is :{_count}"; }
public void Dispose() { Console.WriteLine("釋放"); }
}
Client 連續呼叫兩次 → 服務端輸出兩次「建構/釋放」,回傳值皆為 1。
需配置:
1. 契約 SessionMode=SessionMode.Required
2. 服務 InstanceContextMode=PerSession
3. Binding wsHttpBinding 啟用 reliableSession
Client 兩次呼叫 → 同一實例,計數器遞增 (1, 2)。可透過 OperationContext.Current.SessionId 取得 Session ID。
Client 建立兩個 Proxy 呼叫 → 共享同一實例,計數器跨 Proxy 遞增 (1, 2)。服務端僅建構一次。
bindingConfiguration 的 reliableSession.inactivityTimeout 調整。Close() 結束 Session。