Estoy usando un cliente tradicional de servicio web C# generado en VS2008 .Net 3.5, heredando de SoapHttpClientProtocol. Esto se está conectando a un servicio web remoto escrito en Java.¿Cómo configuro un cliente del servicio web C# para enviar el encabezado y el cuerpo de solicitud HTTP en paralelo?
Toda la configuración se realiza en código durante la inicialización del cliente, y se puede ver a continuación:
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
};
Todo funciona bien, pero el tiempo necesario para ejecutar el más simple llamada al método es casi el doble del tiempo de ping red. Mientras que un cliente de prueba de Java tiene aproximadamente el mismo que el tiempo de ping de red:
C# client ~ 550ms
Java client ~ 340ms
Network ping ~ 300ms
Después de analizar el tráfico TCP para una sesión descubrió lo siguiente:
Básicamente, el C# cliente envía paquetes TCP en el siguiente orden .
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.
El cliente de Java envió paquetes TCP en la siguiente secuencia.
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.
hay alguna forma de configurar el cliente de servicios web C# para enviar la cabecera/cuerpo en paralelo como el cliente Java parece?
Cualquier ayuda o consejos muy apreciados.
¿Puedes oler los encabezados http de la solicitud .Net y la solicitud java y compararlos? (Y supongo que el cliente java usa el mismo proxy) –
lo siento, cuando digo proxy quiero decir como en una clase de proxy, en lugar de un proxy http – Christopher
texto editado para eliminar las referencias a 'proxy' y reemplazarlo por 'cliente' – Christopher