通信WCF持续连接

时间:2013-07-04 06:26:06

标签: c# wcf

当使用WCF用于2台计算机通过网络进行通信时,我正在远程服务器上执行一个方法,操作可以采取的时间不知道它可能需要1秒到一天或更长时间,所以我想要将((IClientChannel)pipeProxy).OperationTimeout属性设置为一个较高的值,但这是一种方法,或者这是一种肮脏的编程方式,因为连接一直处于活动状态(它都在一个相对稳定的局域网上)。

1 个答案:

答案 0 :(得分:3)

我不会那样做。如此长的超时可能会导致问题。

我会将操作拆分为两个:从客户端到服务器的一次调用,启动操作,然后从服务器到客户端的回调,说它已完成。回调当然包括任何结果信息(成功,失败等)。

对于需要很长时间的事情,您可能还想引入“保持活动”机制,客户端定期调用服务器以检查它是否仍在响应。

如果你有很长的超时时间,很难知道某些事情是否真的出错了。但是如果你将操作分成两部分,它就会让不可能知道某些事情是否出错,除非你偶尔使用keep-alive(或更确切地说,“你还活着吗?”)样式消息进行轮询

或者,你可以让服务器偶尔回调一下进度消息,但这比管理客户端偶尔轮询服务器要困难一些(因为客户端必须跟踪服务器最后一次调用服务器的时间)确定服务器是否已停止响应。)