手动跟踪WCF客户端的不活动时间

时间:2014-05-08 07:32:52

标签: c# wcf wcf-client

我有一个WCF客户端,如果超过X秒没有进行任何调用,则需要关闭与服务器的连接。 我的服务器有一个很长的inactivityTimeout我无法更改(我可以做的唯一更改是在客户端)

阅读后我明白我无法使用WCF's配置,所以我想跟踪我的WCF客户端手动拨打电话之间的时间。 如果客户端未拨打超过X秒的电话,我将关闭该连接。

我想到了两种方法来实现它,但我不喜欢它们中的任何一种:

  1. 为我的所有功能添加一些代码,以节省通话时间。

  2. 使用IClientMessageInspector - 在这种情况下,我需要将调用时间发送到将保存此数据的外部类,并及时调用客户端,以防它识别出对服务器还没有制作X秒。

  3. 我正在寻找一个简单的解决方案,例如每次调用服务器时都会调用的事件,因此跟踪断开连接的所有时间逻辑都将在同一个类中发生(WCF's客户端代码)或也许某种方式使用WCF's配置,以便在不活动超过X秒的情况下自动关闭连接。

    我使用的绑定是netTcpBindingreliableSession

    关于如何实施它的任何想法?

1 个答案:

答案 0 :(得分:0)

我几乎总是有一个方法返回对开放服务客户端GetMyService的引用。这样我就有了在一个地方实例化和打开服务的逻辑,主要是因为我可以可靠地在开发,测试和生产环境之间切换端点。在我的设置中,进行服务调用的方法关闭了服务,但是如果你把它留下来,你会得到你的解决方案。

有一个方法可以返回服务客户端并保留对它的引用。如果服务关闭,它将打开服务。在下一次调用方法时,它只返回打开的服务客户端。然后,您需要做的就是创建一个关闭服务的计时器,并在每次调用GetService方法时重置它。

我无法想象一个场景,你需要保持连接打开,但可以关闭它“willy nilly”。除非您打开连接时可能需要传递一些状态?在这种情况下,我的解决方案更有意义。我仍然怀疑你不需要保持连接打开。否则,因为用户去喝咖啡会随意关闭它。