我试图让一个HTTP POST到Apache Web服务器。

我发现该设置的ContentLength似乎是需要为请求的工作。

直接从GetRequestStream()和SendChunked为真集,但请求挂起当这样做时,我宁愿创建的XmlWriter无限期。

下面是我的请求是如何创建的:

    private HttpWebRequest MakeRequest(string url, string method)
    {
        HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
        request.Method = method;
        request.Timeout = Timeout; //Property in my class, assume it's 10000
        request.ContentType = "text/xml"; //I am only writing xml with XmlWriter
        if (method != WebRequestMethods.Http.Get)
        {
            request.SendChunked = true;
        }
        return request;
    }

我怎样才能让SendChunked工作,所以我没有设置的ContentLength?我没有看到一个理由把它发送到服务器之前的某个地方存储的XmlWriter的字符串。

编辑:这里是我的代码引起问题:

    using (Stream stream = webRequest.GetRequestStream())
    {
        using (XmlWriter writer = XmlWriter.Create(stream, XmlTags.Settings))
        {
            Generator.WriteXml<TRequest>(request, writer);
        }
    }

在我没有一个使用来自GetRequestStream()返回的流对象上有,我假定设置时的XmlWriter关闭该流,但是这并非如此。

下面一个问题的答案,让我这个。我将它们标记为答案。

至于HttpWebRequest的来讲,我的原代码的工作就好了。

有帮助吗?

解决方案

这应该工作,你必须写它的方式。我们可以看到,实际上做上传的代码?你是否记得要关闭该流?

其他提示

综观例如在 HTTP:// msdn.microsoft.com/en-us/library/system.net.httpwebrequest.sendchunked.aspx 他们仍然设置内容长度。真正的底线是,如果你要发送的数据,你需要告诉你接收多少数据被发送。为什么你不知道你发送请求前,你有多少数据发送?

的ContentLength:

<强> 属性值 类型:System .. :: Int64的 数据的字节数,以发送到互联网资源。默认值为-1,这表明属性尚未设置和没有请求的数据要发送。

编辑亚伦(I错):

HttpWebRequest httpWebRequest = HttpWebRequest.Create("http://test") as HttpWebRequest;
httpWebRequest.SendChunked = true;
MessageBox.Show("|" + httpWebRequest.TransferEncoding + "|");

从System.Net.HttpWebRequest.SerializeHeaders():

if (this.HttpWriteMode == HttpWriteMode.Chunked)
{
    this._HttpRequestHeaders.AddInternal("Transfer-Encoding", "chunked");
}
else if (this.ContentLength >= 0L)
{
    this._HttpRequestHeaders.ChangeInternal("Content-Length", this._ContentLength.ToString(NumberFormatInfo.InvariantInfo));
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top