2017-09-13 2 views
1

Problem hochladen. (Jetzt ist nicht wichtig, wie ich einen Upload-Fortschritt zeigen soll. Ich kann einfach einige Daten auf die Konsole ausgeben).Wie Daten durch Abschnitte über HttpWebRequest

-Code:

Stackoverlow hat viele solcher Fragen: link 1 etc. (Ich kann nicht mehr Links enthalten, weil ich keine ausreichenden Ruf haben).

using System; 
using System.Text; 
using System.IO; 
using System.Net; 

... 

public static void UploadData() 
{ 
    const string data = "simple string"; 
    byte[] buffer = new ASCIIEncoding().GetBytes(data); 

    // Thanks to http://www.posttestserver.com all is working from the box 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://posttestserver.com/post.php"); 
    req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 " + 
        "(KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10"; 
    req.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
    req.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.3"); 
    req.Headers.Add("Accept-Language", "en-US,en;q=0.8"); 
    req.Method = "POST"; 
    req.ContentType = "application/x-www-form-urlencoded"; 
    req.ContentLength = buffer.Length;    
    req.SendChunked = true;    

    int bytesRead = buffer.Length; 
    const int chunkSize = 3; 
    Stream s = req.GetRequestStream(); 
    for (int offset = 0; offset < bytesRead; offset += chunkSize) 
    { 
     int bytesLeft = bytesRead - offset; 
     int bytesWrite = bytesLeft > chunkSize ? chunkSize : bytesLeft; 
     s.Write(buffer, offset, bytesWrite); 
    } 
    s.Close(); // IMPORTANT: only here all data will be send 
} 

Bemerkungen:

Auch nach this link, jeweils das Senden während jedes Schreiben auf eine Anfrage Strom, aber in Wirklichkeit (es kann gezeigt werden, in Fiddler) alle Sendeoperationen treten nur auftreten müssen nach Anfrage Stream-Schließung oder nur durch Antwort bekommen und nicht früher. (alles hängt von den Parametern SendChuncked, AllowWriteStreamBuffering und ContentLength ab, aber Daten werden niemals nach jedem Schreiben in einen Stream gesendet).

Frage:

Wie Daten (physisch) nach jedem gesendet werden schriftlich (jeden Aufruf der Write-Methode)?

Constraints:

  • Net 2.0;

  • Verwenden nur des HttpWebRequest-Grundelements (nicht WebClient).

Antwort

0

Weil niemand diese Frage beantwortet, aber diese Frage auf russische Stackoverflow wurde von den zergatul Benutzern beantwortet, werde ich this answer from russian stackoverflow hier posten.


Die Antwort
Es funktioniert wie erwartet. Ich habe Microsoft Network Monitor verwendet. Dies ist ein gutes Dienstprogramm und es ist kostenlos (im Gegensatz zu httpdebugger). Ich habe Ihren Code in Net 2.0 debugged.

enter image description here

Network Monitor zeigt jedes 3-Byte-Senden (Ich habe eine längere Schnur genommen).

enter image description here

Hier wird der Text "ple" ("ple String SIM") wurde abgeschickt.

enter image description here


Bemerkung
Im ersten Bild der Zeichenfolge
// ВАЖНО: только здесь будут отправлены данные через сеть
bedeutet
// IMPORTANT: only here data will be sent over the net

Verwandte Themen