保持连接用户的跟踪数量到WCF服务?

时间:2009-07-23 10:59:42

标签: c# wcf

我有一个net tcp PerSession WCF服务,我当前用于跟踪连接用户数(活动客户端)的逻辑正在使用服务构造函数和心跳机制。

在构造函数中我只是增加一个静态成员,并且在将heartbeat发送到客户端期间,如果其中一个异常引发(TimeoutException,FaultException,CommunicationObjectAbortedException),我会减少数量。

此外,我正在使用心跳发送其他内容。 直到现在它完美无缺,但还有更好的方法吗?

1 个答案:

答案 0 :(得分: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属性获取传入服务实例的会话通道。