【问题标题】:WCF Service Side Timeout not executingWCF 服务端超时未执行
【发布时间】:2016-11-07 18:54:13
【问题描述】:

我有一个配置为使用 basichttpbinding 的 WCF 服务。我想测试服务器端超时,但更改配置时看不到任何更改。

这是我的绑定:

    <binding name="DefaultBasicBinding" closeTimeout="00:00:30" openTimeout="00:00:30" sendTimeout="00:00:30" maxBufferSize="4194304" maxBufferPoolSize="4194304" maxReceivedMessageSize="4194304">
      <readerQuotas maxDepth="100" maxStringContentLength="1000000" maxArrayLength="1000000" maxBytesPerRead="1000000" />
    </binding>

我进行了很多研究,但无法使其发挥作用。 我正在使用 wcf 测试客户端来调用有问题的服务,该服务的客户端超时为 10 分钟。

我还有一个事务超时为 30 秒的服务行为。 该服务托管在本地 IIS 中,其中编译调试设置为 false,httpruntime 执行超时设置为 30 秒。

    <httpRuntime executionTimeout="30" maxRequestLength="67108864"/>

我的服务调用持续存在最终调用 1 分半钟的定时存储过程的服务。每次我调用它都会成功执行的服务。

当我将发送超时更改为不到一分钟时,我看不出有什么不同。

好像哪里都没有答案,我也看过WCF不支持服务端超时?

我需要帮助解决这个问题。提前致谢。

【问题讨论】:

标签: c# wcf


【解决方案1】:

该过程涉及四个超时值。 其中三个涉及客户端,只有一个适用于服务器端。

客户端

openTimeout:当您尝试打开与 WCF 的连接时会出现超时。
closeTimeout:当您尝试关闭与 WCF 的连接时,超时开始。
sendTimeout:这是指定客户端可以等待传输完成数据写入直到抛出异常的超时时间。

服务器端

ReceiveTimeout:这是指定服务从开始接收请求到处理消息可以等待多长时间的超时。这是服务器端设置。当您向服务发送大消息并且服务需要很长时间来处理时,您需要增加此设置。

如果我理解正确,那么您需要在服务器端使用 RecieveTimeout 来实现您想要的结果。

【讨论】:

  • 我可以尝试一下,但从我阅读的内容来看,情况并非如此。打开关闭和发送也都可以通过服务器进行配置。
  • 我可以尝试不管超时,看看会发生什么。我会回来找你的!
【解决方案2】:

绑定超时旋钮的简要总结...

客户端:

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

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

来自这个post。查看并重新检查您的配置。

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2011-03-22
    • 2012-03-25
    • 2012-03-23
    • 2010-09-18
    相关资源
    最近更新 更多