2011-05-17 103 views
0

我们有一个WCF服务方法(同步),它调用另一个进程(通过COM)来执行某些操作。现在这个COM进程需要大约10-15秒才能完成,然后将调用返回给我的服务,然后服务返回给客户端。超时异常的WCF服务行为

在WCF客户端,我们有一个sendtimeout设置为5秒,所以5秒后我们收到客户端的超时异常。

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

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

问候,

回答

0

AFAIK,则抛出异常在客户端,但是,从操作的服务执行。如果你有长时间的运行操作,你可以检查出asynchronous calls

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

  • 如果您想中止客户端超时的服务器操作,您可以添加一个服务操作像CancelCOMCall,并从客户端调用时抓到一个TimeoutException,这将杀死COM进程。

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

我同意这两种方法都非常整洁,但是如果没有异步调用,看起来有点困难。尽管我不是WCF专家。

+0

嗯,我理解你关于异步调用的观点,但不幸的是,服务调用不能做成异步(由于我们遵循一些规范/标准)。 – 2011-05-19 07:37:51

+0

更新了我的答案。 – henginy 2011-05-23 07:35:00