【发布时间】: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