我正在尝试向Apache Web服务器进行HTTP POST。我发现设置ContentLength似乎是请求工作所必需的。我更愿意直接从GetRequestStream()创建一个XmlWriter并将SendChunked设置为true,但这样做会导致请求无限期地挂起。以下是我的请求创建方式:
我该如何让SendChunked工作,以便无需设置ContentLength?我不认为需要在将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()返回的Stream对象进行使用,我以为在XmlWriter被处理时会自动关闭流,但事实并非如此。
以下其中一个答案让我明白了这一点。我将把它们标记为答案。
就HttpWebRequest而言,我的原始代码完全可以正常工作。