Почему IIS7 игнорирует мой заголовок типа контента, когда я использую ASP.NET для потоковой передачи файлов? - PullRequest
5 голосов
/ 09 февраля 2010

У меня простой веб-сайт с двумя страницами. Один отображает список файлов, а другой потоковый файл, когда он щелкает в списке. Все было в порядке в течение 6 месяцев, но теперь мне нужно перенести сайт на Windows 2008 / IIS7. У меня это в основном работает, но файлы не открываются должным образом (в Firefox), потому что мой заголовок типа контента игнорируется. На производственной площадке (IIS6) заголовки (с использованием Fiddler):

HTTP/1.1 200 OK
Date: Tue, 09 Feb 2010 16:00:51 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"
Content-Length: 236841
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Content-Type: application/octet-stream

но на тестовом сервере IIS7 я получаю:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 236841
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment; filename="myfile__foo.pdf"

Fiddler также сообщает о нарушении протокола и сообщает: «Несоответствие длины содержимого: заголовок ответа потребовал 236841 байт, но сервер отправил 238378 байт».

Мой код выглядит так:

            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=\"" + doc.DisplayFilename + "." + doc.FileExtension + "\"");
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.TransmitFile(file.FullName);
            Response.End();

Я пытался это исправить пару дней. Я не очень знаком с IIS7 и изо всех сил пытался найти, где изменить различные настройки. Мне удалось разобраться с двумя управляемыми режимами конвейера и исправить некоторые другие проблемы, переключившись на классический .NET AppPool (при передаче файла возникали всевозможные ошибки).

Есть ли какой-нибудь способ сказать IIS7 не перезаписывать мой заголовок ContentType, если это то, что происходит?

1 Ответ

0 голосов
/ 10 февраля 2010

У вас нет HttpModules, изменяющих запрос / ответ? Являются ли файлы web.config одинаковыми?

Откуда берутся эти дополнительные 2K байта? Что в них?

...