Заголовок Content-Length игнорируется IIS 6? - PullRequest
2 голосов
/ 06 мая 2011

Я работаю над веб-приложением, которое включает в себя возможность сохранять загруженные файлы. Файлы хранятся в базе данных SQL в столбце «изображение» и передаются через страницу GetFile.aspx с использованием Response.BinaryWrite ().

До вчерашнего дня у меня были проблемы с загрузкой файлов Office 2007/2010. Файл загружался бы без проблем, но когда Word (или Excel, или любая другая программа Office) открывали его, он жаловался на поврежденный файл. Но он все равно откроется без каких-либо явных проблем или пропущенных данных. Решение оказалось включить заголовок Content-Length в ответ:

If dr.Read() Then
  Response.Clear()
  Response.Buffer = True
  Response.AppendHeader("Content-disposition", "attachment;filename=" + Server.UrlEncode(dr("FileName").ToString()))
  Response.AppendHeader("Content-Length", dr("ContentSize").ToString())
  Response.ContentType = dr("ContentType").ToString()
  Response.BinaryWrite(dr("FileContent"))
End If
dr.Close()
Response.Flush()
Response.End()

dr - это SqlDataReader.

Это прекрасно работало на моей локальной машине разработчика (Windows 7, IIS 7.5, ASP 2.0). Файлы загружаются и открываются без проблем. Но на нашем тестовом сервере (Windows Server 2003, IIS 6) это все еще проблема. Я посмотрел на трафик с помощью WireShark и обнаружил, что мой заголовок Content-Length отсутствует! Все остальное, что я настраиваю (включая заголовок теста: Response.AppendHeader("TestHeader", "TestValue"). Обнаружено. Я убедился, что ContentSize имеет значение в данных, которые я получаю, и я даже попытался изменить его на Response.AppendHeader("Content-Length", "1234567"), чтобы просто получить значение там . Ничего не появляется!

Я также попробовал Фиддлера посмотреть на трафик; моя машина разработки действительно содержит свойство content-length (хотя оно, очевидно, отключено на один байт ... Fiddler сообщил о нарушении протокола), а тестовый сервер - нет!

Что происходит? IIS 6 игнорирует заголовок по какой-то причине? Нужно ли изменить настройку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...