gpt4 book ai didi

c# - .NET 4.5 超过 4.0 时大量增加了新的 TCP 连接数?

转载 作者:可可西里 更新时间:2023-11-01 02:32:53 26 4
gpt4 key购买 nike

我目前正在 .NET 4.5 和 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 },
},
};

最佳答案

这是由于修复不同问题时引入的回归。它与来自服务器的分 block 传输编码响应有关。

对于直接使用 HttpWebRequest 的用户,您可以通过确保您的应用程序读取整个响应流来解决此问题。这意味着您需要对流调用 Read 或 BeginRead 方法,直到它返回 0 作为读取的字节数。

对于那些使用像 WCF 这样的包装技术的人来说,在客户端没有已知的解决方法。如果您有权访问服务器,则可以更改服务器以发送基于内容长度的响应而不是分 block 响应,这应该可以避免客户。

已确定此问题的修复程序,并将在即将发布的框架更新中广泛发布。如果这阻碍了您,请联系 Microsoft 客户支持。

关于c# - .NET 4.5 超过 4.0 时大量增加了新的 TCP 连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16561883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com