WCF超时 - 线程被终止还是允许完成?

3

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

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

如果在执行Method3(或任何这些方法)时达到了服务配置的超时时间会发生什么?执行ServiceMethod的线程是否立即被终止?没有进一步的执行吗?还是进程允许线程继续到结束,而不返回任何结果?

我的关注点是知道超时遇到之前处理了多少内容。如果允许线程完成,则可以知道所有内容都已完成(即使没有返回结果)。但是,如果线程立即被终止,则必须设计ServiceMethod以便可以跟踪其进度,然后从那里重新尝试。

2个回答

4
操作在服务器上允许完成 - 是WCF通道超时。事实上,有些人在这里询问了一种在超时发生时强制终止服务器端处理的方法,普遍认为干净地执行这样的操作是困难的。 为什么WCF不支持服务端超时?

0

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

当通道超时时,客户端将收到一个异常信号作为通道故障。这告诉客户端该通道不安全,需要重新创建。

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

+1 对于“为什么WCF不支持服务端超时”这个问题的回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接