2009-07-23 47 views
4

我有一個net tcp PerSession WCF服務,我目前用於跟蹤連接用戶數(活動客戶端)的邏輯是使用服務構造函數和心跳機制。保持跟蹤WCF服務的用戶數量?

在構造函數中我只是增加一個靜態成員,並在發送心跳到客戶端時,如果其中一個例外引發(TimeoutException,FaultException,CommunicationObjectAbortedException)我遞減數字。

此外,我正在使用心跳發送其他東西。 直到現在它完美的工作,但有沒有更好的方法?

+0

難道你不能只使用WCF中的內置性能計數器來檢查?似乎很多不必要的工作來處理自己,真的..... – 2009-07-23 13:58:37

回答

2

你可以創建你的實現IInstanceContextInitializer,一旦新的InstanceContext被創建,它將被通知。

public class MyInstanceContextInitializer : IInstanceContextInitializer 
    { 
    public void Initialize(InstanceContext instanceContext, Message message) 
    { 
     // hook up to events to get notified about changes in the state of this instance context. 
     // remember refernce to it 
    } 
    } 

並將其安裝

public class InstanceInitializerBehavior : IEndpointBehavior 
    { 

    public void AddBindingParameters(ServiceEndpoint serviceEndpoint, BindingParameterCollection bindingParameters) 
    { } 

    //Apply the custom IInstanceContextProvider to the EndpointDispatcher.DispatchRuntime 
    public void ApplyDispatchBehavior(ServiceEndpoint serviceEndpoint, EndpointDispatcher endpointDispatcher) 
    { 
     MyInstanceContextInitializer extension = new MyInstanceContextInitializer(); 
     endpointDispatcher.DispatchRuntime.InstanceContextInitializers.Add(extension); 
    } 

    public void ApplyClientBehavior(ServiceEndpoint serviceEndpoint, ClientRuntime behavior) 
    { } 

    public void Validate(ServiceEndpoint endpoint) 
    { } 
    } 

一旦你已取得了InstanceContext可以使用IncomingChannels屬性來獲取被傳入到服務實例的sessionful渠道。