【发布时间】:2010-03-10 15:01:19
【问题描述】:
我使用的是在 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 客户端一样并行发送标头/正文?
非常感谢任何帮助或指示。
【问题讨论】:
-
你能嗅探 .Net 请求和 java 请求的 http 头并比较它们吗? (我猜java客户端使用相同的代理)
-
对不起,当我说代理时,我的意思是在代理类中,而不是在 http 代理中
-
编辑文本以删除对“代理”的引用并替换为“客户端”
-
添加fiddler之类的http调试代理,然后嗅探包内容。你应该得到一些信息。
标签: c# http web-services client soaphttpclientprotocol