2009-06-19 3 views
1

Я запускаю сайт на IIS6 для приложения ASP.NET и включал сжатие, которое отлично работало для веб-страниц .aspx.Отправка сжатого ответа в ASP.NET

Что не работает, загружаются двоичные файлы, которые передаются как часть ответа обратной передачи: например. link button - «загрузить в excel» - клики пользователей, а код генерирует двоичный файл, выполняет Response.Clear(), а затем записывает файл в Response.OutputStream.

Отклик просматривается браузерами, но он всегда равен нулю. Поэтому я предполагаю, что веб-браузеры ожидают сжатый ответ, а поскольку исходный двоичный файл не является допустимым сжатым потоком, он терпит неудачу. Я озадачен тем, почему это должно быть, если я очистил ответ - наверняка, заголовки ответов (с указанием сжатия) также будут очищены?

Так возникает два вопроса:

1) как сжать двоичный файл для отправки сжатого ответа? 2) как я могу проверить во время выполнения, чтобы увидеть, включено ли сжатие IIS?

Приветствия

ответ

3

Я хотел бы отключить сжатие и проверить все еще работает это, только чтобы выделить тот факт, что это на самом деле из-за сжатия IIS. Я говорю вам, что, поскольку я запускаю сайт с включенным IIS/сжатием, который без проблем создает файлы PDF (двоичные).

В любом случае, вот часть кода, которая работает для меня.

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();