我们有一个WCF服务方法(同步),它调用另一个进程(通过COM)来做一些事情。现在这个COM过程大约需要10-15秒才能完成,然后将调用返回给我的服务,而该服务又应该返回给客户端。
在WCF客户端,我们将sendtimeout设置为5秒,因此在5秒后我们会在客户端收到超时异常。
现在我的问题是客户端收到超时异常后服务端会发生什么。因为调用COM进程仍在进行中,并且可能在5-10秒之后返回服务,所以服务如何处理这种情况。
如果需要进一步输入,请告诉我。
此致
答案 0 :(得分:0)
Afaik,客户端抛出异常,但服务继续运行。如果您有长时间运行的操作,可以查看asynchronous calls。
<强>更新强> 如果这是不可能的,并且由于同样的原因增加超时不是一个选项,我看不出如何避免超时异常。一些恢复方法:
如果您想在客户端超时时中止服务器操作,可以添加CancelCOMCall
之类的服务操作,并在捕获TimeoutException
时从客户端调用杀死COM进程。
如果要让操作完成但阻止来自客户端的重复调用(由超时异常后的重试引起),您可以保存每个客户端正在运行的COM操作,并放弃对已经运行的进程的调用。
我同意这两种方法都不是很整洁,但没有异步调用对我来说看起来有点困难。我不是WCF专家。