Я использую традиционный клиент веб-службы C #, созданный в VS2008 .Net 3.5, унаследованный от SoapHttpClientProtocol. Это подключение к удаленному веб-сервису, написанному на Java.
Вся конфигурация выполняется в коде во время инициализации клиента, и ее можно увидеть ниже:
ServicePointManager.Expect100Continue = false;
ServicePointManager.DefaultConnectionLimit = 10;
var client = new APIService
{
EnableDecompression = true,
Url = _url + "?guid=" + Guid.NewGuid(),
Credentials = new NetworkCredential(user, password, null),
PreAuthenticate = true,
Timeout = 5000 // 5 sec
};
Все работает нормально, но время выполнения простейшего вызова метода почти удваивает время проверки сети. Принимая во внимание, что тестовый клиент Java занимает примерно столько же, сколько время проверки сети:
C# client ~ 550ms
Java client ~ 340ms
Network ping ~ 300ms
После анализа трафика TCP для сеанса обнаружено следующее:
По сути, клиент C # отправлял TCP-пакеты в следующей последовательности.
Client Send HTTP Headers in one packet.
Client Waits For TCP ACK from server.
Client Sends HTTP Body in one packet.
Client Waits For TCP ACK from server.
Клиент Java отправлял TCP-пакеты в следующей последовательности.
Client Sends HTTP Headers in one packet.
Client Sends HTTP Body in one packet.
Client Revieves ACK for first packet.
Client Revieves ACK for second packet.
Client Revieves ACK for second packet.
Есть ли способ настроить клиент веб-службы C # на параллельную отправку заголовка / тела, как это выглядит на Java-клиенте?
Любая помощь или указатели очень ценятся.