Einige Fragen über das schreiben auf ASP.NET Antwort stream

Mache ich tests mit ASP.NET HttpHandler für den download einer Datei schreiben, die direkt auf den response-stream, und ich bin mir ziemlich sicher, dass über die Art, wie ich bin, es zu tun. Dies ist ein Beispiel-Methode, in der Zukunft die Datei konnte gespeichert werden, in ein BLOB in der Datenbank:

        public void GetFile(HttpResponse response)
    {
        String fileName = "example.iso";
        response.ClearHeaders();
        response.ClearContent();
        response.ContentType = "application/octet-stream";
        response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
        using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath("~/App_Data"), fileName), FileMode.Open))
        {
            Byte[] buffer = new Byte[4096];
            Int32 readed = 0;

            while ((readed = fs.Read(buffer, 0, buffer.Length)) > 0)
            {
                response.OutputStream.Write(buffer, 0, readed);
                response.Flush();
            }
        }
    }

Aber ich bin mir nicht sicher, ob dies richtig ist, oder gibt es einen besseren Weg, es zu tun.
Meine Fragen sind:

  1. Wenn ich öffnen Sie die url mit dem browser, erscheint das Dialogfeld "Datei Speichern"... aber wie es scheint, der server hat bereits begonnen, push-Daten in den stream, bevor ich auf "Speichern" klicken, ist das normal?
  2. Wenn ich entfernen Sie die Zeile"Antwort.Flush()", wenn ich öffnen Sie die url mit dem browser, ... ich sehe, wie der web-server schiebt Daten, sondern die "Datei Speichern" - dialog erscheint nicht, (oder zumindest nicht in einer angemessenen Zeit Mode) warum?
  3. Wenn ich öffnen Sie die url mit einem WebRequest-Objekt, sehe ich, dass die HttpResponse.ContentLength ist "-1", obwohl ich kann den stream und die Datei. Was bedeutet -1? Wann ist HttpResponse.ContentLength zeigen die Länge der Antwort? Zum Beispiel habe ich eine Methode zum abrufen einer großen xml-compresed mit deflate als binären Datenstrom, aber in diesem Fall..., wenn ich mit einem WebRequest, in der HttpResponse-ich kann tatsächlich sehen, die ContentLength mit der Länge des Streams, warum?
  4. Was ist die optimale Länge für die Byte [] - array, das ich als Puffer für eine optimale Leistung in einem web-server? Ich habe gelesen, dass zwischen 4K und 8K... aber welche Faktoren sollte ich berücksichtigen, um die richtige Entscheidung.
  5. Funktioniert diese Methode aufblasen der IIS-oder client-Arbeitsspeicher-Auslastung? oder ist es tatsächlich die Pufferung der übertragung korrekt?

Sorry für so viele Fragen, ich bin ziemlich neu in der web-Entwicklung 😛

Cheers.

InformationsquelleAutor vtortola | 2010-04-02
Schreibe einen Kommentar