我创建了一个 WCF 服务,其中 ServiceHost 类无法实例化为单例。我需要监视与此服务的每个连接,甚至在第一次调用与其关联的方法之前。在实践中,我想在客户端打开通道与服务通信时进行记录。是否可以?在网上我只找到两种解决方案:
(1) 和 (2) 都不能满足我的需求,因为我想创建自己的应用程序,而且正如我之前所说,我不能使用单例模式。你遇到过这样的问题吗?你是怎么处理的?
最后但并非最不重要的一点是,我还需要监视对服务提供的每个方法的调用。有没有办法做到这一点?任何帮助将不胜感激。
这有很多问题。
首先,调用 WCF 服务的首选方法是每次调用模型,例如,您的客户端将调用服务方法,这会导致在服务器上创建服务类的实例,并执行有问题的方法,然后再次处理服务实例。因此,您无法真正监控客户端连接本身——它们只存在于调用执行时的几分之一秒内。
此外,除了性能计数器之外,服务器端实际上没有太多基础设施来监控每秒调用等。以前称为“Dublin”(目前称为“AppFabric”)的新服务器插件产品应该会在该领域(可管理性)带来不少改进 -有关更多信息,请参阅此MSDN 文章。
但即使在今天,您也可以设想采用服务类本身,并监控该类的实例化和销毁。服务类也有一个链接,ServiceHost通过OperationContext.Current.Host属性实例化它——所以你可以想象以某种方式向主机发送一个新的服务类实例已经创建的信号。只有一个主机对象,所以它可以工作,但需要在 ServiceHost 上采用经过深思熟虑和经过充分测试的多线程安全方法(您可以创建自己的自定义 ServiceHost 来实现类似的功能)。
这可能是迈向“监控我的服务”方向的一步。至于性能监控 - 为什么现有的几十个 WCF 性能计数器不帮助您或为您提供所需的信息?