J'envoie une requête HTTP PUT à partir d'une application WinForms et je souhaite envoyer un léger filet de données PUT à la page qui va écrire des messages dans une base de données lorsque les données PUT arrivent. J'utilise WebRequest et j'ai défini SendChunked sur true, mais il semble seulement envoyer un fragment après que 8 Ko de données aient été écrites dans le flux de requêtes.Puis-je dire à WebRequest quand envoyer un fragment à partir du flux de requêtes?
Pire encore, la page Web semble cesser de recevoir après environ 42 Ko et l'expéditeur émet une exception WebException après environ 77 Ko avec le message "La requête a été abandonnée: la demande a été annulée". En fait, j'envoie de très petites quantités de données dans chaque message, donc si je pouvais convaincre WebRequest d'envoyer juste un petit morceau contenant chaque message, ça irait.
Voici ce que j'expérimente avec à ce jour:
var request =
(HttpWebRequest)WebRequest.Create("http://localhost/test.php");
request.Method = "PUT";
request.Timeout = 300 * 1000;
request.SendChunked = true;
request.AllowWriteStreamBuffering = false;
request.ContentType = "application/octet-stream";
using (var post = new StreamWriter(request.GetRequestStream()))
{
post.AutoFlush = true;
for (int i = 0; i < 100; i++)
{
if (i > 0)
{
// force flushing previous chunk
post.Write(new String(' ', 1048));
Thread.Sleep(2 * 1000);
}
Console.Out.WriteLine("Requesting {0} at {1}.", i, DateTime.Now);
string chunk = i.ToString();
post.WriteLine(i);
}
}
J'écris 1KB d'espaces après chaque message pour essayer de forcer le WebRequest à envoyer un morceau plus tôt.