我正在使用在 VS2008 .Net 3.5 中生成的传统 C# Web 服务客户端,继承自 SoapHttpClientProtocol。这是连接到用 Java 编写的远程 Web 服务。
所有配置都是在客户端初始化期间在代码中完成的,如下所示:
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
};
一切正常,但是执行最简单的方法调用所花费的时间几乎是网络 ping 时间的两倍。而 Java 测试客户端与网络 ping 时间大致相同:
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# Web 服务客户端以在 Java 客户端出现时并行发送标头/正文?
非常感谢任何帮助或指示。