bekommt eine responseLength für eine HttpWebRequest von einem anderen webfile lädt in den Upload zu streamen, wenn die Quelle ContentLength nicht implementiert?

StackOverflow https://stackoverflow.com/questions/1865326

Frage

Hintergrund - Ich versuche, eine bestehende Webseite zu einer separaten Web-Anwendung zu streamen, mit HttpWebRequest / HttpWebResponse in C #. Ein Problem, das ich bin falle auf, dass ich versuche, die Datei-Upload-Anforderungs-Inhalt-Länge einzustellen mit dem Content-Länge des Datei-Download, aber die Frage scheint zu sein, wenn die Quelle Webseite auf einem Webserver ist, für die der HttpWebResponse nicht bietet eine Inhaltslänge.

HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest;
 using (HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse)
 {
   var uploadRequest = (HttpWebRequest) WebRequest.Create(new Uri("uripath"));
   uploadRequest.Method = "POST";
   uploadRequest.ContentLength = downloadResponse.ContentLength;  // ####

FRAGE : Wie kann ich diesen Ansatz aktualisieren für diesen Fall gerecht zu werden (wenn die Download-Antwort keinen Content-Length-Satz hat). Wäre es irgendwie vielleicht ein Memorystream zu benutzen? Jedes Codebeispiel würde geschätzt.

War es hilfreich?

Lösung

Wenn Sie gerne die Antwort des anderen Web-Server vollständig herunterzuladen, das in der Tat wäre das Leben leichter machen. wiederholt Schreiben Sie einfach in einen Memorystream, wie Sie von dem ersten Web-Server holen, dann wissen Sie die Länge für die zweite Anforderung zu setzen und die Daten in leicht schreiben kann (vor allem als MemoryStream hat ein WriteTo Methode, um seinen Inhalt in einem anderen Stream zu schreiben).

Die Kehrseite der Medaille ist, dass Sie eine Menge Speicher nehmen werden, wenn es eine große Datei ist. Ist das wahrscheinlich ein Problem in Ihrer Situation sein? Alternativen sind:

  • Schreiben in eine Datei stattdessen eine MemoryStream zu verwenden. Sie werden danach die Datei bereinigen müssen, natürlich - Sie grundsätzlich das Dateisystem als größerer Speicher mit:)
  • eine segmentierte Übertragungscodierung verwenden, um „ein Stück zu lesen, schreiben ein Stück“; Diese können knifflig sein Recht zu bekommen -. es ist sicherlich nicht etwas, was ich vorher gemacht habe
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top