none
关于一个超时问题:WCF 请求通道在等待 00:05:00 以后答复时超时。增加传递给请求调用的.. RRS feed

  • 问题

  • 在我的系统中,我遇到了超时问题,虽然这个问题在CSDN上我也提出过,但仍然无人能帮我解答。希望这里能找到我的答案,

    问题描述:

    Question1:

     我的服务的通信数据量不大,每次接受2000条数据吧,经常出错。服务调用很平凡,一天大概调用 5000次左右 有150次左右出现"请求通道在等待 00:05:00 以后答复时超时。增加传递给请求调用的.."的错误。

    异常描述:

     

     

    请求通道在等待 00:05:00 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能是更长超时的一部分。

    Server stack trace:

       在 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)

       在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)

       在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)

       在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)

       在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

     

    Exception rethrown at [0]:

       在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)

       在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

       在 ITMS.WebUI.BaseInfoServiceRef.IBaseInfoService.GetAllInfo(String domain, String className)

       在 ITMS.WebUI.BaseInfoServiceRef.BaseInfoServiceClient.GetAllInfo(String domain, String className) 位置 f:\X\Service References\BaseInfoServiceRef\Reference.cs:行号 27234

       在 ITMS.WebUI.Core.BaseInfoServiceClientProxy.GetAllInfo(String domainName, String className) 位置 f:\X\App_Code\Core\BaseInfoServiceClientProxy.cs:行号 56读取响应时,对“http://xxxxxx/BaseInfo.svc”的 HTTP 请求已超过了分配的超时 00:05:00。分配给此操作的时间可能比超时长。   在 System.ServiceModel.Channels.HttpInput.WebResponseHttpInput.WebResponseInputStream.Read(Byte[] buffer, Int32 offset, Int32 count)

       在 System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream)

       在 System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception& requestException)

       在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

       在 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)

     

    Question2:

     第二个错误也会偶尔发生,但没有上面那个频繁

    异常描述:

     

    操作已超时。   在 System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)

      

    在 System.ServiceModel.Channels.HttpInput.WebResponseHttpInput.WebResponseInputStream.Read(Byte[] buffer, Int32 offset, Int32 count)

     

     

    环境配置描述:

    我的环境是 Web App 应用程序 + WCF Service(部署在IIS下的) 以下是配置文件

    Web App 的配置文件

     

    XML code
    <wsHttpBinding> <binding name="WSHttpBinding_IxxxxxxxService" closeTimeout="00:00:15" openTimeout="00:00:15" receiveTimeout="00:05:00" sendTimeout="00:05:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="32000" maxStringContentLength="8192000" maxArrayLength="16384000" maxBytesPerRead="4096000" maxNameTableCharCount="16384000" /> <reliableSession ordered="true" inactivityTimeout="00:05:00" enabled="false" /> <security mode="None" /> </binding> <wsHttpBinding/> <client> <endpoint address="http://xxxxx/xxxxx/xxxxxx.svc" behaviorConfiguration="BigListDataBindingBehavior" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAssignFunctionService" contract="xxxxxxxServiceRef.IxxxxxxxService" name="WSHttpBinding_IxxxxxxxxService"> <identity> <servicePrincipalName value="host/localhost" /> </identity> </endpoint> <client/> <behaviors> <endpointBehaviors> <behavior name="BigListDataBindingBehavior"> <dataContractSerializer maxItemsInObjectGraph="65536000" /> <clientCredentials> <serviceCertificate> <authentication certificateValidationMode="None" /> </serviceCertificate> </clientCredentials>--> </behavior> </endpointBehaviors> </behaviors>


    Service的配置文件
    XML code
    <system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> <bindings> <wsHttpBinding> <binding name="NewBinding" maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000" > <readerQuotas maxStringContentLength="65536000" maxArrayLength="65536000" /> <security mode="None" /> </binding> </wsHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="ITMS.Services.CommonBehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="false" /> <dataContractSerializer maxItemsInObjectGraph="65536000" /> <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" /> </behavior> </behaviors> <services> <service behaviorConfiguration="ITMS.Services.CommonBehavior" name="xxxx.xxxx.xxxxService"> <endpoint address="" binding="wsHttpBinding" bindingConfiguration="NewBinding" contract="xxxx.xxxx.IxxxxxService" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> </system.serviceModel>



    使用代码

    C# code
    xxxxxxClient client = new xxxxxxClient("WSHttpBinding_IxxxxxxxService"); try//手动关闭服务 { ds = client.GetAllInfo(); } catch (Exception ex) { //写入日志 } finally { try { client.Close(); } catch { client.Abort(); throw; } }

     


    Welcome to Gavin Luo `s blog

    • 已编辑 Gavin Luo 2011年4月4日 10:40 接受2000条数据,回传有奇异了
    2011年4月3日 12:40

全部回复

  • 你好 

    或者你可以嘗試改變receiveTimeout="00:05:00" 變成更大的數值 E,G. receiveTimeout="00:10:00"

    <wsHttpBinding> <binding name="WSHttpBinding_IxxxxxxxService" closeTimeout="00:00:15" openTimeout="00:00:15" receiveTimeout="00:05:00" sendTimeout="00:05:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288000" maxReceivedMessageSize="65536000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">

    看看能不能解決這個timeout問題1

    Please correct me if my concept is wrong

     


    Chi
    2011年4月3日 14:17
  • 感谢 ChiYau 的回复,

    我的Question1 的异常信息是让我设置 SendTimeout 的值,而不是 receiveTimeout 。但是我层尝试设置为10分钟,但依然会出现超时。

    我曾跟踪过服务器的性能 和 数据库的性能,资源占用并不高,并没有出现任何瓶颈。


    Welcome to Gavin Luo `s blog
    2011年4月4日 3:21
  • 感谢 ChiYau 的回复,

    我的Question1 的异常信息是让我设置 SendTimeout 的值,而不是 receiveTimeout 。但是我层尝试设置为10分钟,但依然会出现超时。

    我曾跟踪过服务器的性能 和 数据库的性能,资源占用并不高,并没有出现任何瓶颈。


    Welcome to Gavin Luo `s blog

    把这个inactivityTimeout="00:05:00"改为更大的值。

    服务和客户端都修改。

    然后再测试


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月4日 9:07
    版主
  • 感谢 Frank 的回复

    我的Config 里面 虽然配置了 reliableSession 配配置了这个节点,但是enabled 设置的为False,设置这个有用吗?另外看了点资料,对于这个可靠通信不太明白,难道Wcf的通信是不可靠?

    期待回复~~


    Welcome to Gavin Luo `s blog
    2011年4月4日 10:39
  • WCF有很丰富的跟踪日志可以打开来看看问题出在哪一边,不过配置很复杂,我没用过。
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    2011年4月6日 8:16
  • WCF有很丰富的跟踪日志可以打开来看看问题出在哪一边,不过配置很复杂,我没用过。
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。

    可以使用 配置文件编辑器 辅助设置的
    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月6日 8:18
    版主
  • 可以使用 配置文件编辑器 辅助设置的

    这个配置是如何设置呢?能否给出贴图看看,thanks


    Welcome to Gavin Luo `s blog
    2011年4月7日 9:40
  • Visual Studio里面有,如果你的项目是WCF项目,邮件点击config文件可以看到编辑WCF配置,如果不是呢,在菜单-〉工具-〉WCF服务配置编辑器,可以打开。
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    2011年4月7日 9:56
  • 有高手来解释一下,我这个跟踪日志是什么意思吗?


    Welcome to Gavin Luo `s blog
    2011年4月9日 3:04
  • 有高手来解释一下,我这个跟踪日志是什么意思吗?


    Welcome to Gavin Luo `s blog

    你贴一下信息吗

    这里看不到图片


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月9日 5:34
    版主
  • 是不是WCF服务内部出错了,导致后续的服务连接不上去啊。

    或者服务器承受压力不行?

    有时连接的上,有时就超时连接不上,配置应该不是问题。

    • 已建议为答案 castlooo 2011年4月11日 1:30
    2011年4月11日 1:29
  • 谢谢你的回复,内存和CPU是没有一点问题的。WCF 服务内部出错了?是什么意思?
    Welcome to Gavin Luo `s blog
    2011年4月11日 5:35
  • 有高手来解释一下,我这个跟踪日志是什么意思吗?


    Welcome to Gavin Luo `s blog

    你贴一下信息吗

    这里看不到图片


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    Frank 你好, 我把图片放到了这里

    http://blog.csdn.net/gavin_luo/archive/2011/04/12/6317444.aspx


    Welcome to Gavin Luo `s blog
    2011年4月12日 2:50
  • 有高手来解释一下,我这个跟踪日志是什么意思吗?


    Welcome to Gavin Luo `s blog

    你贴一下信息吗

    这里看不到图片


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    Frank 你好, 我把图片放到了这里

    http://blog.csdn.net/gavin_luo/archive/2011/04/12/6317444.aspx


    Welcome to Gavin Luo `s blog

    我看了你的截图。

    你服务端的限流Throtling 设置可以修改一下。

    我怀疑和 服务端的并发处理能力有点关系,截图里显示的 其实消息可以正常的处理。

    有可能一些请求消息在服务端放进了队列,但是等待处理的时间过长,导致错误。

    你可以尝试在服务端把Throttling的设置变大点。

    别使用默认的。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月12日 3:09
    版主
  • 这日志不行,你要贴出错时候的日志,就是有红色图标的部分,这些都是健康状态的日志看不出什么来。
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    2011年4月12日 4:01
  • thanks  Frank,我的Service Config 中   对于Behavior的描述中有 这句

    <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" />

    是不是1000不够?这个最大能设置多少呢?这个的数量是如何参考设置的

    我设置了1000 ,一天下来调用几万次应该没问题吧?


    Welcome to Gavin Luo `s blog
    2011年4月12日 5:51
  • thanks  Frank,我的Service Config 中   对于Behavior的描述中有 这句

     <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" />

    是不是1000不够?这个最大能设置多少呢?这个的数量是如何参考设置的

    我设置了1000 ,一天下来调用几万次应该没问题吧?


    Welcome to Gavin Luo `s blog

    这是服务的端的限流设置,1000次的最大连接,最大会话数,最大并发实例数。

    这个设置也配置到服务上。

    问个问题,你这请求并发最大的数目大概是多少?

    会超过1000吗?就是同一时刻,你估算下

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月12日 6:28
    版主
  • 不使用Session没可能超过1000吧,1000是很恐怖的啦。
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    2011年4月12日 14:27
  • 不会超过1000的并发的,5-10的并发可能是有的。

    这是服务的端的限流设置,1000次的最大连接,最大会话数,最大并发实例数。

    这个设置也配置到服务上

    我现在就是在service的config 中配置了这个并发数。还要在哪里配置一次呢?


    Welcome to Gavin Luo `s blog
    2011年4月13日 2:19
  • 不会超过1000的并发的,5-10的并发可能是有的。

     

    这是服务的端的限流设置,1000次的最大连接,最大会话数,最大并发实例数。

    这个设置也配置到服务上

    我现在就是在service的config 中配置了这个并发数。还要在哪里配置一次呢?

     


    Welcome to Gavin Luo `s blog

    那看来不是 并发的问题,如果只有5-10个,这个是不会导致问题的。

    再问个问题,有这种 长时间的服务操作处理代码吗?

    或者服务端死锁,

    比如可能多个服务实例一起读写同一个数据,或者文件,

    导致死锁?

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月13日 2:27
    版主
  • 我有个新的发现,如果将Web程序和Service 程序 部署在同一台电脑中。是没有这种超时现象的。但一分开,就会出现超时错误,他们所连接使用的数据库都是一样的。
    Welcome to Gavin Luo `s blog
    2011年4月15日 7:52
  • 那看起来还真是超时了?
    快乐在于能够长时间的为自己认为值得的事情努力工作,不管它是什么。
    2011年4月16日 15:48
  • 我有个新的发现,如果将Web程序和Service 程序 部署在同一台电脑中。是没有这种超时现象的。但一分开,就会出现超时错误,他们所连接使用的数据库都是一样的。
    Welcome to Gavin Luo `s blog


    这个有点奇怪了

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年4月17日 11:48
    版主
  • 见鬼了,最终没能解决吗?~ 我也遇到此问题。

    2012年11月21日 2:17
  • 至今没有解决

    i like “job”

    2012年11月21日 2:55
  • 设置一下服务的限流行为就可以了。具体如下:

      serviceBehaviors>

      <behavior name="WCFService.WCFServiceBehavior">

      <serviceTimeouts transactionTimeout="00:01:00"/>

      <serviceMetadata httpGetEnabled="true" />

      <serviceDebug includeExceptionDetailInFaults="false" />

      <serviceThrottling maxConcurrentCalls="1000" maxConcurrentInstances="1000" maxConcurrentSessions="1000"/>-->

      </behavior>

      </serviceBehaviors>

      这里1000可以修改,根据你的实际WCF服务需求量。服务激活类型和实例调用方式。然后进行调整。修改完毕以后,重新启动服务,基本就正常了。

    正在使用此方案去解决该问题,跟踪中。

    2012年11月21日 2:55
  • 这个问题后来怎么解决的?我现在遇到的问题好像跟你的有点像。
    https://social.microsoft.com/Forums/zh-CN/efb01961-30cc-491b-96e4-92f1636cb72c/wcf?forum=wcfzhchs
    2015年12月2日 9:07