Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何监视客户端与WCF服务的连接?_Wcf - Fatal编程技术网

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

如何监视客户端与WCF服务的连接?,wcf,Wcf,我创建了一个WCF服务,其中不能将ServiceHost类实例化为Singleton。我需要监视到这个服务的每个连接,甚至在第一次调用与之相关的方法之前。实际上,我希望在客户端打开与服务通信的通道时进行日志记录。可能吗? 在网上,我只能找到两种解决方案: ServiceHost对象必须由服务器实例化并用作单例。然后,我必须提供一个由客户端调用的初始方法,以便将自己注册到服务 使用性能监视器显示与服务相关的计数器 (1)和(2)都不能满足我的需求,因为我想创建自己的应用程序,正如我前面所说的,我不

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

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

    最后,但并非最不重要的是,我还需要监视对服务提供的每个方法的调用。有办法吗?
    任何帮助都将不胜感激。

    这有很多问题

    首先,调用WCF服务的首选方法是每次调用模型,例如,您的客户机将调用服务方法,这将导致在服务器上创建服务类的实例,执行有问题的方法,然后再次释放服务实例。因此,您无法真正监视客户端连接本身——它们只在调用执行时存在几分之一秒

    此外,除了性能计数器之外,服务器端实际上没有太多的基础设施来监控每秒的呼叫等。新的服务器插件产品以前称为“Dublin”(目前称为“AppFabric”),应该在这一领域(可管理性)带来很多改进——见此

    但即使在今天,您也可以设想使用服务类本身,并监视该类的实例化和销毁。服务类还有一个到
    ServiceHost
    的链接,该链接通过
    OperationContext.Current.Host
    属性实例化了服务类-因此您可以设想以某种方式向主机发送信号,表示已创建了新的服务类实例。只需要一个主机对象,这样就可以工作,但需要在ServiceHost上采用经过深思熟虑和测试的多线程安全方法(您可以创建自己的自定义ServiceHost来实现类似的功能)


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

    您查看了吗?

    谢谢您的回答,但您提出的解决方案不符合我的要求。服务类的构造函数仅在调用其中一个服务方法时调用,而不是在客户端连接到服务时调用。我需要这类信息。有什么想法吗?客户端“连接”到服务与正在实例化的服务类相同。。。。。客户端没有连接到服务器或其他什么东西-当调用进来时,ServiceHost实例化服务类并调用方法-这就是全部内容……抱歉,我认为误解是因为我对WCF的了解不足。我试着用另一种方式描述我需要什么。当我写“当客户端连接到服务时”,我的意思是“当客户端调用open方法时”,然后在调用服务提供的方法之前。我认为应该有一种方法来检测这个操作。@Maurizio:不,没有这样的。您(1)创建客户机代理,并(2)调用服务方法。在调用服务方法之前,没有“.Open()”或任何需要执行的操作-没有“连接到服务”或任何操作。您只需调用一个服务方法,然后在服务器上创建一个服务类实例来处理该调用,然后在调用完成后处理该调用。再次感谢您。现在我终于可以结束我的研究了…:-)这有用吗?