Я пытаюсь создать протокол HTTP POST для веб-сервера Apache.
Я считаю, что настройка ContentLength необходима для того, чтобы запрос работал.
Я бы лучше создал XmlWriter непосредственно из GetRequestStream () и установил для SendChunked значение true, но при этом запрос зависает на неопределенное время.
Вот как создается мой запрос:
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);
}
}
Прежде чем у меня не было использования объекта Stream, возвращенного из GetRequestStream (), я предполагал, что XmlWriter закрыл поток при удалении, но это не так.
Один из ответов ниже, позвольте мне на это. Я отмечу их как ответ.
Что касается HttpWebRequest, мой оригинальный код работает просто отлично.