【问题标题】:How do I configure a C# web service client to send HTTP request header and body in parallel?如何配置 C# Web 服务客户端以并行发送 HTTP 请求标头和正文?
【发布时间】: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


【解决方案1】:

感谢 Rob 的回复,最终我选择使用 Add Service Reference / WCF 代理生成,默认情况下会这样做。可能是因为它在下面使用了更新的 HTTP 库。

对于返回复杂对象的原始数组的 SOAP 方法,我确实遇到了一些 WCF 代理生成问题(即:返回包含对象数组的对象工作正常)。为了解决这个问题,您要么必须将数组包装在对象中,要么将 SOAP 服务器配置从 RPC 切换到 DOCUMENT(这就是我们所做的)。

【讨论】:

    【解决方案2】:

    我认为您可以使用继承的EndGetRequestStream 方法破解 SoapHttpClientProtocol。将其保存到缓冲区,直到请求完成。然后制作自己的流并立即将其全部推送出去。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 2021-11-09
      相关资源
      最近更新 更多