超时 WCF 服务

61
WCF 中的超时机制是怎样工作的呢?比如说,我知道可以为客户端绑定配置`sendTimeout`和`receiveTimeout`。但是它们是如何工作的呢?
MSDN 对`sendTimeout`的描述是:
“一个时间间隔值,指定发送操作完成的时间间隔。此值应大于或等于零。默认值为 00:01:00。”
那么什么是发送操作或接收操作呢?
3个回答

62

客户端:

  • SendTimeout用于初始化OperationTimeout,它管理整个发送消息的交互(包括在请求-响应情况下接收回复消息)。当从CallbackContract方法发送回复消息时,此超时也适用。
  • OpenTimeout和CloseTimeout在打开和关闭通道时使用(当未传递显式超时值时)。
  • ReceiveTimeout未被使用。

服务端:

  • Send、Open和Close Timeout与客户端相同(用于回调)。
  • ReceiveTimeout由ServiceFramework层用于初始化会话空闲超时。

来源为MSDN论坛上的Brian McNamara


如果我将OperationTimeout设置为非常高的值,并将sendTimeout设置为极小的值,实质上应该会超时,但我从未收到超时异常。有人能告诉我如何设置一个示例来触发sendTimeout异常吗? - Didier A.
我的WCF服务复制文件并返回进度回调。它超时了。在阅读了这个答案之后,我增加了所有超时值,除了ReceiveTimeout,尽管WCF错误消息说要增加ReceiveTimeout。但那没用。在我的情况下起作用的是增加ReceiveTimout。 - Tony D
1
我发现这个主题太过于泛化:WCF在Cassic和集成管道中的部署会暴露出不同的超时行为。这个答案可能会满足“本地”的WCF,比如netTcpBinding,但是在处理类似basichttpbinding的Httphandler托管WCF时,如果你在操作契约内执行一个非常长时间的CPU绑定作业,IIS可能会在关闭超时(服务器端)之前杀死WCF!!在这种情况下,我建议重新审查IIS应用程序池超时,同时还要考虑ping和关闭超时。 - Diego Scaravaggi
请明确 _OperationTimeout_。根据我的测试,OpenTimeout 和 SendTimeout 与另一侧(即 Serve 端)的业务逻辑层完成操作逻辑所需的时间无关。操作逻辑所需的时间实际上由 OperationTimeout 控制。例如,如果将 OpenTimeout 设置为 1 分钟,将 OperationTimeout 设置为 2 分钟,则在 WCF 客户端成功与服务器建立连接后,操作逻辑正在运行,然后数据库需要 3 分钟,现在不会导致 OpenTimeout,但会导致 OperationTimeout。 - cateyes

9
请参见“WCF中的超时及其默认值” http://blogs.msdn.com/b/hongmeig/archive/2010/03/06/timeouts-in-wcf-and-their-default-values.aspx 绑定的超时时间-SendTimeout,ReceiveTimeout,OpenTimeout和CloseTimeout。通过配置或代码轻松设置绑定。这些的默认值是1分钟。
ServiceHost具有OpenTimeout和CloseTimeout。 OpenTimeout的默认值为1分钟,CloseTimeout的默认值为10秒。
客户端通道上的超时时间。 有一个OperationTimeout,您可以通过将通道转换为IContextChannel来设置它。 默认值也是1分钟。 TCP传输上的超时时间称为ChannelInitializationTimeout,默认值为5秒。
ASPNET。有关闭超时,就像服务主机关闭超时一样,默认值为90秒。 ExecutionTimeout,就像我们的操作超时一样,默认值为110秒。

4

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