超时 WCF 服务
Posted
技术标签:
【中文标题】超时 WCF 服务【英文标题】:Timeouts WCF Services 【发布时间】:2010-09-18 18:56:24 【问题描述】:超时如何在 WCF 中工作?例如,我知道您可以为客户端绑定配置 sendTimeout 和 receiveTimeout。但是它们是如何工作的呢?
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 服务的主要内容,如果未能解决你的问题,请参考以下文章