首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WCF服务,如何增加超时?

WCF服务,如何增加超时?
EN

Stack Overflow用户
提问于 2009-10-05 14:04:16
回答 4查看 254K关注 0票数 98

可能看起来像是一个愚蠢的问题,但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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-05 15:42:38

超时配置需要在客户机级设置,所以我在web.config中设置的配置没有效果,WCF测试工具有自己的配置,需要设置超时。

票数 26
EN

Stack Overflow用户

发布于 2009-10-05 14:14:25

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

<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 docs on binding为您提供了有关这些工具用途的更多信息。

要认真掌握WCF的所有错综复杂之处,我强烈建议您购买米歇尔·勒鲁克斯·布斯塔曼特的"Learning WCF“一书:

Learning 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 Top to Bottom“系列影片--强烈推荐!

有关更高级的主题,我建议您查看Juwal Lowy的Programming WCF服务一书。

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

票数 187
EN

Stack Overflow用户

发布于 2014-07-30 21:18:44

最好的方法是更改代码中所需的任何设置。

看看下面的例子:

using(WCFServiceClient client = new WCFServiceClient ())
{ 
    client.Endpoint.Binding.SendTimeout = new TimeSpan(0, 1, 30);
}
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1520283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档