服务
我在高负载下有 WCF 服务。响应时间平均约为 60 毫秒。服务主要使用默认配置,除了 maxConcurrentCalls="5000" 外,暴露了带有 basicHttpBinding 的端点。
客户
另一项服务(进一步称为“客户端”)正在使用该服务。很少(如 0.5%)有 TimeoutExceptions (*)。客户端上的 sendTimeout 设置为“00:00:05”。
负载测试
我可以使用 VS 负载测试重现相同的内容:
[TestMethod]
public void Test()
{
using (var client = new SomeServiceClient())
{
// some randomization to make request more realistic
var response = client.GetSomething(request);
}
}
超时在以下情况下消失:
- 我增加sendTimeout。
- 我创建一个通道并在整个负载测试期间重用它。
现在奇怪的东西:
负载测试(即使有超时)显示测试时间平均为 0.06,最长为 0.2 秒,远低于 5 秒。这也发生在生产中(日志是这样说的),但到目前为止还没有发现对客户的影响。
问题
有谁知道可能出了什么问题?
或者:您对这种情况在 WCF 配置/实例化/等方面有何建议?
就可扩展性而言,所有这些东西已经在许多主机上运行:客户端在 4 台主机上,服务以及在 4 台主机上。增加客户数量会有所帮助吗?
(*) 当我提到 TimeoutExceptions 时,我总是指客户端异常。
System.TimeoutException:请求通道在 00:00:05 之后等待回复时超时。增加传递给 Request 调用的超时值或增加 Binding 上的 SendTimeout 值。分配给此操作的时间可能是较长超时的一部分。---> System.TimeoutException:对“ http://someservice.intranet/99.99/someendpoint.svc ”的 HTTP 请求已超过分配的超时时间 00:00:05。分配给此操作的时间可能是较长超时的一部分。---> System.Net.WebException:操作已超时
有愿意提供帮助的 WCF 大师吗?