WCF服务,如何增加超时?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

可能看起来像一个愚蠢的问题,但WCF中的一切似乎比asmx更复杂,我怎样才能增加svc服务的超时?

这是我到目前为止:

<bindings>
      <basicHttpBinding>
        <binding name="IncreasedTimeout" 
          openTimeout="12:00:00" 
          receiveTimeout="12:00:00" closeTimeout="12:00:00"
          sendTimeout="12:00:00">
        </binding>
      </basicHttpBinding>
</bindings>

然后我的终端被这样映射:

<endpoint address="" 
  binding="basicHttpBinding" bindingConfiguration="IncreasedTimeout"
             contract="ServiceLibrary.IDownloads">
             <identity>
                <dns value="localhost" />
             </identity>
          </endpoint>

我得到的确切错误:

请求通道在00:00:59.9990000之后等待回复时超时。增加传递给请求调用的超时值或增加绑定上的SendTimeout值。分配给此操作的时间可能是超时时间的一部分。

在WCF测试客户端中,有一个配置图标,其中包含我的服务的运行时配置:

你可以看到它与我为它设定的值不一样吗?我究竟做错了什么?

<bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IDownloads" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="">
                            <extendedProtectionPolicy policyEnforcement="Never" />
                        </transport>
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
提问于
用户回答回答于

超时配置需要在客户端级别设置,因此我在web.config中设置的配置没有任何影响,WCF测试工具具有自己的配置,并且需要设置超时时间。

用户回答回答于

在绑定配置中,可以调整四个超时值:

<bindings>
  <basicHttpBinding>
    <binding name="IncreasedTimeout"
             sendTimeout="00:25:00">
    </binding>
  </basicHttpBinding>

最重要的是sendTimeout,它说明了客户端等待WCF服务响应的时间。可以hours:minutes:seconds在设置中指定- 在我的示例中,我将超时设置为25分钟。

openTimeout顾名思义是时间你愿意,当你打开你的WCF服务的连接等待的时间量。同样,这closeTimeout是关闭连接(处置客户端代理)时的等待时间,将在引发异常之前等待。

receiveTimeout有点像一面镜子sendTimeout- 虽然发送超时是等待服务器响应receiveTimeout的时间,但是需要多长时间才能让客户端接收并处理来自服务器的响应服务器。

如果你发送“普通”消息,两者都可能非常短 - 特别是receiveTimeout,自从收到SOAP消息以来,解密,检查和反序列化应该几乎没有时间。这个故事与流媒体不同 - 在这种情况下,可能需要更多时间在客户端上实际完成从服务器获取的流的“下载”。

还有openTimeout,receiveTimeout和closeTimeout。关于绑定MSDN文档为您提供了更多关于这些内容的信息。

为了认真掌握WCF的所有细节,我强烈建议购买Michele Leroux Bustamante 的“ Learning WCF ”一书:

学习WCF http://ecx.images-amazon.com/images/I/51GNuqUJq%2BL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

而且你还花一些时间看她的15部分“ WCF顶部到底部 ”截屏视频系列 - 强烈推荐!

对于更高级的主题,我建议查阅Juwal Lowy的编程WCF服务书。

编程WCF http://ecx.images-amazon.com/images/I/41odWcLoGAL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg

扫码关注云+社区