超时 WCF 服务

Posted

技术标签:

【中文标题】超时 WCF 服务【英文标题】:Timeouts WCF Services 【发布时间】:2010-09-18 18:56:24 【问题描述】:

超时如何在 WCF 中工作?例如,我知道您可以为客户端绑定配置 sendTimeoutreceiveTimeout。但是它们是如何工作的呢?

MSDN 将 sendTimeout 描述为:

一个 TimeSpan 值,它指定为一个提供的时间间隔 发送操作完成。此值应大于或等于 归零。默认为 00:01:00。

什么是发送操作/接收操作?

【问题讨论】:

【参考方案1】:

客户端:

SendTimeout 用于初始化 OperationTimeout,它控制发送消息的整个交互(包括在请求-回复情况下接收回复消息)。从 CallbackContract 方法发送回复消息时,此超时也适用。 OpenTimeout 和 CloseTimeout 用于打开和关闭通道(当没有传递明确的超时值时)。 没有使用ReceiveTimeout。

服务器端:

发送、打开和关闭超时与客户端相同(用于回调)。 ServiceFramework 层使用ReceiveTimeout 来初始化会话空闲超时。

来源是Brian McNamara on MSDN forums。

【讨论】:

如果我将 OperationTimeout 设置为一个非常高的值,并将 sendTimeout 设置为一个非常小的值,本质上应该超时,我永远不会遇到超时异常。谁能告诉我如何设置一个触发 sendTimeout 异常的示例? 我的 WCF 服务复制文件并返回有关进度的回调。时间到了。阅读此答案后,我增加了除 ReceiveTimeout 之外的所有超时值,尽管 WCF 错误消息说会增加 ReceiveTimeout。那没有用。至少在我的情况下,有效的方法是增加 ReceiveTimout。 我发现这个话题太笼统了:部署在 Cassic vs Integrated Pipeline 中的 WCF 暴露了不同的超时行为。这个答案可能满足像netTcpBinding这样的“本机”WCF,但是如果你在操作合同中执行一个很长的CPU绑定作业,那么在Httphandler管理的WCF(如basichttpbinding)的情况下,IIS可能会在closetimeout(服务器端)之前杀死WCF!在这种情况下,我建议修改 IIS Application Pool 超时 also ,ping 和关机超时 只需明确OperationTimeout即可。根据我的测试,OpenTimeout和SendTimeout与另一端(即Serve端)业务逻辑层完成操作逻辑所用的时间无关。操作逻辑所花费的时间实际上是由 OperationTimeout 控制的。比如设置OpenTimeout为1分钟,OperationTimeout为2分钟,wcf客户端与服务器建立连接成功后,运行逻辑,然后db需要3分钟,现在不会导致OpenTimeout,但会导致 OperationTimeout。【参考方案2】:

请参阅“WCF 中的超时及其默认值”http://blogs.msdn.com/b/hongmeig/archive/2010/03/06/timeouts-in-wcf-and-their-default-values.aspx

绑定超时,接收超时, OpenTimeout 和 CloseTimeout。它们可以通过以下方式轻松设置 绑定上的配置或代码。这些的默认值为 1 分钟。

ServiceHost 有 OpenTimeout 和 CloseTimeout。 OpenTimeout 的默认值 为 1 分钟,CloseTimeout 的默认值为 10 秒。

客户端通道超时。有一个 OperationTimeout,它 您可以通过将频道转换为 IContextChannel 来设置它。默认 因为这也是 1 分钟。 tcp 传输上的 Ttimeout,称为 ChannelInitializationTimeout,默认为5秒。

ASPNET。有shutdown timeout,就像服务主机close 超时,默认为 90 秒。 ExecutionTimeout,就像我们的 操作超时,默认110秒。

【讨论】:

【参考方案3】:

除了该帖子中的内容之外,还有在客户端定义的操作超时。看到这个:

http://final-proj.blogspot.com/2009/09/wcf-timeouts.html

【讨论】:

以上是关于超时 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务超时

WCF服务,如何增加超时?

超时 WCF 服务

增加C#类库(DLL)调用wcf服务超时

WCF 超时客户端与服务器

mysql 视图中的 WCF 数据服务超时问题