Я пытаюсь сделать Http POST на веб-сервере Apache.C# - HttpWebRequest - POST
Я обнаружил, что для выполнения запроса требуется настройка 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 где-то, прежде чем отправлять ее на сервер.
EDIT: Вот мой код вызывает проблему:
using (Stream stream = webRequest.GetRequestStream())
{
using (XmlWriter writer = XmlWriter.Create(stream, XmlTags.Settings))
{
Generator.WriteXml<TRequest>(request, writer);
}
}
Перед тем, как не было, используя на объекте поток возвращается из GetRequestStream(), я предположил, XmlWriter закрыли поток при их удалении, но это не тот случай.
Один из ответов ниже, позвольте мне. Я буду отмечать их как ответ.
Что касается HttpWebRequest, то мой оригинальный код работает отлично.
ли работа против другого веб-сервера (не Apache)? И вы закрываете поток через XmlWriter или RequestStream? –
У меня нет сервера Windows, чтобы попробовать его, и мне пришлось потратить время на создание кода на C#, чтобы прочитать сообщение. Мне кажется, что настройка HttpWebRequest должна быть исправлена. – jonathanpeppers