0

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

4

1 回答 1

3

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

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

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

如果超时时间很长,就很难知道是否真的出了问题。但是,如果您将操作一分为二,就不可能知道是否出了问题,除非您偶尔使用 keep-alive(或更准确地说,“你还活着吗?”)样式消息进行轮询。

或者,您可以让服务器偶尔使用进度消息回调,但这比让客户端偶尔轮询服务器更难管理(因为客户端必须跟踪服务器上次回调它以确定是否服务器已停止响应)。

于 2013-07-04T06:30:52.170 回答