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