如何监视客户端与WCF服务的连接?

时间:2010-02-09 21:04:33

标签: wcf

我创建了一个WCF服务,其中ServiceHost类无法实例化为Singleton。我需要监视与此服务的每个连接,甚至在第一次调用与之关联的方法之前。在实践中,我想在客户端打开通道与服务进行通信时进行记录。可能吗? 在网络上我只找到两种解决方案:

  1. ServiceHost对象必须由服务器实例化并用作单例。然后我必须提供一个客户调用的初始方法来将自己注册到服务。
  2. 使用性能监视器显示与服务相关的计数器。
  3. (1)和(2)都不满足我的需求,因为我想创建自己的应用程序,正如我之前所说,我不能使用单例模式。 你遇到过这种问题吗?你是怎么经营的?

    最后,但并非最不重要的是,我还需要监控对服务提供的每种方法的调用。有没有办法做到这一点? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

这有很多问题。

首先,调用WCF服务的首选方法是每个呼叫模型,例如,您的客户端将调用服务方法,该方法将导致在服务器上创建服务类的实例,执行相关方法,然后再次处理服务实例。因此,您无法真正监控客户端连接本身 - 它们在执行调用时仅存在几分之一秒。

此外,除了性能计数器之外,服务器端实际上没有太多基础设施来监控每秒呼叫数等。新的服务器插件产品(以前称为“都柏林”)(目前称为“AppFabric”)应该在该领域带来相当多的改进(可管理性) - 请参阅此MSDN article for more info

但即使在今天,您也可以设想自己获取服务类,并监视该类的实例化和销毁。服务类还有一个指向通过ServiceHost属性实例化的OperationContext.Current.Host的链接 - 因此您可以设想以某种方式向主机发信号通知已创建新的服务类实例。只有goign才能成为单个宿主对象,因此可以使用,但需要在ServiceHost上经过深思熟虑且经过良好测试的多线程安全方法(您可以创建自己的自定义ServiceHost来实现类似的东西)。

这可能是迈向“监控我的服务”方向的一步。至于性能监控 - 为什么现有的几十个WCF性能计数器不能帮助您或为您提供所需的信息?

答案 1 :(得分:0)

您是否看过WCF TracingWCF Message Logging