超时WCF服务

超时WCF服务,wcf,configuration,timeout,wcf-binding,Wcf,Configuration,Timeout,Wcf Binding,在WCF中超时是如何工作的?例如,我知道可以为客户端绑定配置sendTimeout和receiveTimeout。但是它们是如何工作的呢 MSDN将sendTimeout描述为: 一个TimeSpan值,用于指定为一个项目提供的时间间隔 发送操作以完成。此值应大于或等于 归零。默认值为00:01:00 什么是发送操作/接收操作?客户端: SendTimeout用于初始化OperationTimeout,它控制发送消息的整个交互(包括在请求-应答情况下接收应答消息)。当从CallbackCont

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

MSDN将sendTimeout描述为:

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

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

客户端:

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

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

来源是。

除了那篇文章上的内容之外,客户端上还定义了操作超时。见此:

请参阅“WCF中的超时及其默认值”

绑定时超时SendTimeout、ReceiveTimeout、, 打开超时和关闭超时。它们可以通过以下两种方式轻松设置: 绑定上的配置或代码。这些的默认值为1 分钟

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

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

ASPNET。有关机超时,就像服务主机关闭一样 超时,默认值为90秒。死刑暂停,就像我们的 操作超时,默认值为110秒


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