2

假设我的 WCF 服务中有以下执行链:

ServiceMethod 调用并等待 Method1,然后调用并等待 Method2,后者调用并等待 Method3。最后 ServiceMethod 在返回之前调用并等待 Method4。

如果在执行方法 3(或任何这些方法)期间遇到服务配置的超时,会发生什么情况?执行 ServiceMethod 的线程是否会立即终止?没有进一步执行?或者进程是否允许线程继续到最后,而不返回任何结果?

我关心的是知道在遇到超时之前处理进行了多长时间。如果允许线程完成,则可以知道无论如何都已完成(即使没有返回结果)。但是,如果线程立即终止,则必须设计 ServiceMethod 以便可以跟踪它走了多远,然后从那里再试一次。

4

2 回答 2

3

允许该操作在服务器上运行完成 - 超时的是 WCF 通道。事实上,有些人在这里要求一种方法来强制服务器端处理在发生超时时中止,并且普遍认为干净地这样做会很困难:

为什么 WCF 不支持服务端超时?

于 2013-02-04T19:57:16.530 回答
0

主机创建服务实例后,它将继续运行,直到任一进程终止,您的逻辑完成并退出入口点(操作)或抛出未捕获的异常。您关心的超时是在客户端和主机之间。

客户端将在通道上收到异常信号,将超时作为通道故障。这告诉客户端通道不安全,必须重新创建。

关于调用链的小评论。您最好将逐步逻辑封装在单个工作流或管理器中,这可以帮助您满足可重新启动或补偿逻辑的要求。在您的服务中有一个入口点,然后可以执行工作流。

关于为什么 WCF 不支持来自“500 内部服务器”的服务端超时的答案 +1

于 2013-02-04T20:07:26.260 回答