1

服务

我在高负载下有 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);
    }
}

超时在以下情况下消失:

  1. 我增加sendTimeout。
  2. 我创建一个通道并在整个负载测试期间重用它。

现在奇怪的东西:

负载测试(即使有超时)显示测试时间平均为 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 大师吗?

4

0 回答 0