扩展 SoapHttpClientProtocol 以纠正错误的服务器内容长度

met*_*hod 5 .net c# web-services soaphttpclientprotocol content-length

最近,我需要访问使用 SOAP::Lite 创建的 Web 服务。使用起来真的很麻烦,因为没有 WSDL,它不返回合理的数据类型等。所以我开始使用提供的示例代码。

从一开始我就遇到问题,请求超时。有时经常,有时很少,但从来没有完全没有问题。在使用 Fiddler 嗅探流量并进行搜索后,似乎 SOAP::Lite 存在/曾经存在一个错误,在处理 UTF-8 编码数据时会弄乱标头 Content-Length。这似乎是合理的,因为我的分析指出超时是由客户端等待更多数据(内容长度)而服务器表示已完成(真实数据)引起的。

所以现在我需要一种方法来对抗这个错误的标头字段,或者:

  1. 提供正确的 Content-Length 或
  2. 填充有效负载以匹配 Content-Length

问题是,我从来没有机会使用 SoapExtension 或任何其他修改,因为 Invoke() 最终会在解析开始之前抛出 IoException 或 WebException。此外,我认为 WS 不是我的,而且相当不可更改。

我还尝试覆盖 SoapHttpClientProtocol.GetWebResponse() 来执行异步请求,但这也无济于事,因为在调用 HttpWebRequest.EndGetResponse() 之前我无法掌握 ResponseStream 并且那个总是抛出异常。

有谁知道我该如何解决这个问题?

更新:现在我也尝试过 WCF 并在 MSDN 上看到这篇文章- 答案不是很令人振奋。基本上,这在管道中发生得太深,用户代码无法访问。我现在最好的选择似乎是使用 Fiddler 脚本来更正 Content-Length 标头,这可能不是微不足道的,因为此 WS 仅可通过 HTTPS 使用。

/担