当使用WCF用于2台计算机通过网络进行通信时,我正在远程服务器上执行一个方法,操作可以采取的时间不知道它可能需要1秒到一天或更长时间,所以我想要将((IClientChannel)pipeProxy).OperationTimeout
属性设置为一个较高的值,但这是一种方法,或者这是一种肮脏的编程方式,因为连接一直处于活动状态(它都在一个相对稳定的局域网上)。
答案 0 :(得分:3)
我不会那样做。如此长的超时可能会导致问题。
我会将操作拆分为两个:从客户端到服务器的一次调用,启动操作,然后从服务器到客户端的回调,说它已完成。回调当然包括任何结果信息(成功,失败等)。
对于需要很长时间的事情,您可能还想引入“保持活动”机制,客户端定期调用服务器以检查它是否仍在响应。
如果你有很长的超时时间,很难知道某些事情是否真的出错了。但是如果你将操作分成两部分,它就会让不可能知道某些事情是否出错,除非你偶尔使用keep-alive(或更确切地说,“你还活着吗?”)样式消息进行轮询
或者,你可以让服务器偶尔回调一下进度消息,但这比管理客户端偶尔轮询服务器要困难一些(因为客户端必须跟踪服务器最后一次调用服务器的时间)确定服务器是否已停止响应。)