Я использую традиционный клиент веб-сервиса C#, сгенерированный в VS2008 .Net 3.5, наследующий от SoapHttpClientProtocol. Это подключение к удаленной веб-службе, написанной на Java.Как настроить клиент веб-службы C# для отправки заголовка и тела запроса HTTP параллельно?
Все настройки выполняются в коде во время инициализации клиента, и его можно увидеть ниже:
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, как представляется?
Любая помощь или указатели очень ценится.
Можете ли вы понюхать заголовки http для запроса .Net и запроса Java и сравнить их? (И я думаю, что java-клиент использует тот же прокси) –
извините, когда я говорю прокси, я имею в виду как в прокси-классе, а не http-прокси – Christopher
отредактированный текст, чтобы удалить ссылки на «прокси» и заменить на «клиент» – Christopher