对不允许分块的服务器的HttpWebRequest不起作用

时间:2009-08-13 14:32:53

标签: c# https httpwebrequest fiddler

我有一些Java Web服务(Https)的C#存根(在Visual Studio 2008,.NET 2.0中创建)。 服务器不允许对请求进行分块。 我能够在HttpWebRequest中将sendChunked设置为false。

当我调用网络服务方法时,这些方法的数据非常少,但它们的工作正常 但是,当我发送包含大量数据的请求时,我收到“无法解析请求”错误。

这是两件奇怪的事情:

  1. 通过将HttpConstants.CHUNKED设置为false可以在Java中正常工作,如果不这样做,则会打破相同的“无法解析请求错误”。
  2. 如果我在后台运行提琴手,一切正常吗?!我相信这是因为Fiddler在发送它们之前缓冲了请求字节。注意:如果我将Fiddler选项关闭为“Decrypt HTTPS”,它将停止工作。

3 个答案:

答案 0 :(得分:0)

啊,经典的“通过观察来改变行为”。问题在于,正如你所指出的那样,Fiddler会做一堆缓冲等等。一个选项可能是关闭(暂时)关闭HTTPS,并使用像Wireshark这样的被动网络嗅探工具来查看.NET是否遵守您正在设置的设置。

答案 1 :(得分:0)

我从你的描述中不清楚“存根”是什么意思。你的意思是你已经创建了一个Java服务的Web引用?

如果是这样,您可以覆盖GetWebRequest方法以返回您自己的HttpWebRequest,并将SendChunked属性设置为false:

public partial class Service1
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest request = (HttpWebRequest) base.GetWebRequest(uri);
        request.SendChunked = false;
        return request;
    }
}

如果这不是您要求的,请澄清。

答案 2 :(得分:0)

我解决了这个问题。 看起来当我在Visual Studio中使用“添加Web引用”创建存根到Web服务方法时,它正在向Web请求添加一些内容,这使得服务器不满意。 我编写了自己的方法,从头开始创建XML并发送Web请求而不使用任何存根,它工作正常。 我讨厌这样的问题。