WCF服务端超时未执行

时间:2016-07-05 20:07:30

标签: c# wcf

我有一个配置为使用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不支持服务端超时?

我需要帮助这一个。提前谢谢。

2 个答案:

答案 0 :(得分:0)

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

客户端

openTimeout:当您尝试打开与WCF的连接时,Timeout会启动。
closeTimeout:当您尝试关闭与WCF的连接时,Timeout会启动。
sendTimeout:这是超时,指定客户端在抛出异常之前等待传输完成数据写入的时间。

服务器端

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

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

答案 1 :(得分:0)

绑定超时旋钮的简短摘要......

客户方:

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

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

来自post。看看并重新检查你的配置。