В настоящее время я тестирую свое клиентское приложение WPF/WCF в .NET 4.5 и 4.0 с целью окончательного развертывания 4.5 на всех клиентских машинах. Часть WCF использует BasicHttpBinding/SOAP.
При тестировании двух клиентских версий в одинаковых условиях (Win7 и т. д.) мы наблюдаем 10-кратное увеличение «новых TCP-подключений» к конечной точке сервера SOAP — клиенты 4.0 устанавливают ~450 в час, а клиенты 4.5 устанавливают ~6000. Поскольку мы подключаемся к удаленному серверу, это проблематично, так как установление нового TCP-соединения увеличивает задержку вызова веб-службы.
При использовании версии 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 },
},
};