0

我们有一个 WCF 服务方法(同步),它调用另一个进程(通过 COM)来做一些事情。现在这个 COM 进程大约需要 10-15 秒才能完成,然后将调用返回给我的服务,而我的服务又应该返回给客户端。

在 WCF 客户端,我们将 sendtimeout 设置为 5 秒,因此 5 秒后我们在客户端收到超时异常。

现在我的问题是客户端收到超时异常后服务端会发生什么。由于调用 COM 进程仍在进行中,可能会在再过 5-10 秒后返回服务,服务如何处理这种情况。

让我知道是否需要进一步输入。

问候,

4

1 回答 1

0

Afaik,客户端抛出异常,但服务继续操作。如果您有长时间运行的操作,您可能会检查异步调用

更新: 如果这是不可能的并且出于同样的原因增加超时不是一个选项,我看不出如何避免超时异常。一些恢复方法:

  • 如果您想在客户端超时时中止服务器操作,您可以添加一个类似的服务操作CancelCOMCall,并在客户端捕获 a 时从客户端调用TimeoutException,这将终止 COM 进程。

  • 如果您想让操作完成但防止来自客户端的重复调用(由超时异常后重试引起),您可以保存每个客户端正在运行的 COM 操作并丢弃已运行进程的调用。

我同意这两种方法都不是很整洁,但是如果没有异步调用,我觉得有点困难。不过,我不是 WCF 专家。

于 2011-05-17T07:20:46.033 回答