首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 實例管理模式詳解:PerCall、PerSession、Single 三種激活類型比較與配置

     編輯:關於.NET

三種實例模式

透過 [ServiceBehavior(InstanceContextMode)] 設定:

  • PerCall (單次):每次呼叫建立新實例,呼叫結束釋放。無狀態、資源釋放快、適合高併發。
  • PerSession (會話/預設):每個 Proxy 專屬實例,維持狀態至 Proxy 關閉。需傳輸層支援 Session (如 wsHttpBinding + reliableSession)。
  • Single (單例):所有 Client 共享同一實例,生命週期無限。全域狀態共享。

契約與服務定義

[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("釋放"); }
}

各模式行為驗證

PerCall

Client 連續呼叫兩次 → 服務端輸出兩次「建構/釋放」,回傳值皆為 1。

PerSession

需配置:
1. 契約 SessionMode=SessionMode.Required
2. 服務 InstanceContextMode=PerSession
3. Binding wsHttpBinding 啟用 reliableSession
Client 兩次呼叫 → 同一實例,計數器遞增 (1, 2)。可透過 OperationContext.Current.SessionId 取得 Session ID。

Single

Client 建立兩個 Proxy 呼叫 → 共享同一實例,計數器跨 Proxy 遞增 (1, 2)。服務端僅建構一次。

Session 管理

  • 預設閒置逾時 10 分鐘,可透過 bindingConfiguration 的 reliableSession.inactivityTimeout 調整。
  • Client 可主動 Close() 結束 Session。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved