【问题标题】:WCF Request Channel Timeout ErrorWCF 请求通道超时错误
【发布时间】:2011-06-16 06:35:03
【问题描述】:

我有一个应用程序会高频调用 WCF 服务。该应用程序开始工作正常,然后在几分钟后,每次调用都开始生成此错误:

System.TimeoutException:请求通道在 00:02:00 之后尝试发送超时。增加传递给 Request 调用的超时值或增加 Binding 上的 SendTimeout 值。

我已经尝试了所有我能想到的方法来解决这个错误,例如:

  • 在服务上设置多种并发模式:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] public class ListingService : IListingService

  • 在服务 web.config 中为最大并发调用/会话/实例设置更高的限制:

serviceThrottling maxConcurrentCalls="100000" maxConcurrentSessions="100000" maxConcurrentInstances="100000"

  • 在服务的 global.asax 上的 application_start 上设置更高的 servicepointmanager defaultconnectionlimit:

protected void Application_Start(object sender, EventArgs e) { System.Net.ServicePointManager.DefaultConnectionLimit = 100000; }

  • 确保我正在关闭客户端连接:

using (var client = new ListingServiceClient()) { client.SaveListing(listing); client.Close(); }

这里是服务 web.config - http://pastebin.com/d9qtZUKN

但是,我仍然收到错误消息。我敢肯定,服务电话不会花那么长时间。有什么想法吗?

【问题讨论】:

  • 为了确认 wcf 调用实际上并没有花那么长时间,我创建了一个什么都不做的 web 方法,并从测试用例中多次调用它。几分钟后,它开始生成上面的超时错误。我在 IIS 7 中是否达到了最大连接数限制?
  • 连接数是有限制的,但它依赖于处理器的内核数量,因此您遇到了不同的问题。在这个问题中写下服务和方法体的配置。
  • 添加了指向服务 web.config 代码的链接。方法体无需添加任何内容,因为它是一个空方法,即)public void Test() { }
  • 尝试在属性ServiceBehavior中设置InstanceContextMode=PerCall。还尝试从服务定义中删除绑定和行为配置,使用默认设置对其进行测试。问题的另一个可能原因 - 您在一台计算机上多次测试,这是客户端的问题。
  • 您也可以创建一个重现此问题的示例项目,并提供我自己测试的链接。

标签: timeout wcf wcf-client


【解决方案1】:

问题是数据库超时导致 WCF 超时。

【讨论】:

  • 正确,sendTimeout 会在给定时间间隔内未完成特定呼叫时触发,因此某些呼叫会卡住 2 分钟,您可以捕获 TimeoutException 以查看更多详细信息
猜你喜欢
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多