2009-06-19 14 views
1

Ich verwende eine Website auf IIS6 für ASP.NET-Anwendung und aktivierte Komprimierung, die für die ASPX-Webseiten funktionierte.Senden komprimierter Antwort in ASP.NET

Was nicht funktioniert, ist heruntergeladen Binärdateien, die als Teil einer Postback-Antwort übertragen werden: z. link button ist 'download to excel' - der Benutzer klickt und der Code erzeugt eine Binärdatei, macht eine Response.Clear() und schreibt die Datei dann in den Response.OutputStream.

Eine Antwort wird von Browsern gesehen, aber es ist immer Null Bytes. Ich gehe daher davon aus, dass Webbrowser eine komprimierte Antwort erwarten, und da die rohe Binärdatei kein gültiger komprimierter Stream ist, schlägt sie fehl. Ich bin verwirrt, warum dies sein sollte, wenn ich die Antwort gelöscht habe - sicherlich werden die Antwortheader (die Komprimierung angeben) auch gelöscht?

So zwei Fragen:

1) Wie kann ich die Binärdatei komprimieren eine komprimierte Antwort zu senden? 2) Wie kann ich zur Laufzeit überprüfen, ob die IIS-Komprimierung aktiviert ist?

Prost

Antwort

3

würde ich Komprimierung deaktivieren und prüfen, ob dies noch funktioniert, nur die Tatsache zu isolieren, dass dies in der Tat aufgrund IIS-Komprimierung ist. Ich sage Ihnen das, weil ich eine IIS/Compression-fähige Site laufen lasse, die PDF-Dateien (binär) ohne Probleme bereitstellt.

Wie auch immer, hier ist der Teil des Codes, der für mich funktioniert.

Response.Clear(); 
Response.ClearHeaders(); 

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 
Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
Response.AddHeader("Content-transfer-encoding", "8bit"); 
Response.AddHeader("Cache-Control", "private"); 
Response.AddHeader("Pragma", "cache"); 
Response.AddHeader("Expires", "0"); 

Response.ContentType = "application/pdf"; 
Response.WriteFile(filePath); 

Response.Flush(); 
Response.Close(); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
Verwandte Themen