我目前正在.NET 4.5 vs 4.0 中测试我的 WPF/WCF 客户端应用程序,以期最终将 4.5 推广到所有客户端计算机。WCF 部分使用 BasicHttpBinding/SOAP。
在相同条件下(Win7 等)测试两个客户端版本时,我们看到到 SOAP 服务器端点的“新 TCP 连接”增加了 10 倍——4.0 客户端每小时建立约 450 个,而 4.5 客户端建立约 6,000 个。由于我们要连接到远程服务器,这很麻烦,因为建立一个新的 TCP 连接会为 Web 服务调用增加很大的延迟。
在使用 4.0 时,我们之前已经调整了客户端ServicePointManager
设置以最大化我们的 TCP 连接重用,并希望这些设置适用于 4.5。
我的应用程序通常一次执行一个调用,可能平均每 10 秒执行一次 - 每隔几分钟就会爆发 10 个并发调用。
我查看了更改日志,但找不到对 .NET 的这一部分所做的修复/更改的任何引用。任何人都可以阐明这里可能发生的事情吗?
ServicePointManager.UseNagleAlgorithm = true;
ServicePointManager.Expect100Continue = false;
ServicePointManager.DefaultConnectionLimit = 50;
ServicePointManager.MaxServicePointIdleTime = 10000;
Binding binding = new BasicHttpBinding
{
SendTimeout = TimeSpan.FromSeconds(_settings.SendTimeout),
ReceiveTimeout = TimeSpan.FromSeconds(_settings.SendTimeout),
MaxReceivedMessageSize = 1024 * 1024 * 10,
MaxBufferSize = 1024 * 1024 * 10,
MaxBufferPoolSize = 1024 * 1024 * 100,
Security =
{
Mode = BasicHttpSecurityMode.TransportCredentialOnly,
Message = { ClientCredentialType = BasicHttpMessageCredentialType.UserName },
Transport = { ClientCredentialType = HttpClientCredentialType.Basic },
},
};