我發送一個來自WinForms應用程序的HTTP PUT請求,我想發送一個緩慢的PUT數據到PUT數據到PUT數據時將消息寫入數據庫的頁面。我使用WebRequest並將SendChunked設置爲true,但似乎只有在將8KB數據寫入請求流後才發送一個塊。我可以告訴WebRequest何時從請求流中發送塊嗎?
更糟糕的是,網頁似乎在大約42KB後停止接收,並且發件人在大約77KB後發出WebException,並顯示消息「請求已中止:請求已被取消」。我實際上在每條消息中發送非常少量的數據,所以如果我能說服WebRequest發送一個包含每條消息的小塊,我會沒事的。
這裏就是我與迄今爲止的實驗:
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);
}
}
我寫的空白1KB每條消息後,試圖迫使WebRequest的發送塊越快。