J'essaie de faire un POST Http à un serveur web Apache.C# - HttpWebRequest - POST
Je trouve que le paramètre ContentLength semble être requis pour que la demande fonctionne. Je préférerais créer un XmlWriter directement à partir de GetRequestStream() et définir SendChunked sur true, mais la requête se bloque indéfiniment à ce moment-là.
Voici comment ma demande est créée:
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;
}
Comment puis-je faire le travail SendChunked donc je ne dois pas mettre ContentLength? Je ne vois pas de raison de stocker la chaîne de XmlWriter quelque part avant de l'envoyer au serveur.
EDIT: Voici mon code l'origine du problème:
using (Stream stream = webRequest.GetRequestStream())
{
using (XmlWriter writer = XmlWriter.Create(stream, XmlTags.Settings))
{
Generator.WriteXml<TRequest>(request, writer);
}
}
Avant que je n'a pas eu d'utiliser sur l'objet Stream retour de GetRequestStream(), je supposais XmlWriter fermé le courant quand il est disposé, mais c'est pas le cas.
L'une des réponses ci-dessous, laissez-moi y aller. Je vais les marquer comme la réponse.
En ce qui concerne HttpWebRequest, mon code d'origine fonctionne très bien.
-t-il contre un autre serveur web fonctionne (non apache)? Et fermez-vous votre flux à travers le XmlWriter ou le RequestStream? –
Je n'ai pas de serveur Windows pour l'essayer, et j'ai dû passer du temps à écrire du code C# pour lire le message. J'ai envie de peaufiner un paramètre sur HttpWebRequest devrait corriger cela. – jonathanpeppers