5

我有一个有两个页面的简单网站。一个显示文件列表,另一个在列表中单击文件时流式传输文件。生产 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 标头,如果这是发生的事情?

4

1 回答 1

0

您没有修改请求/响应的 HttpModules?web.config 文件是否完全相同?

这些额外的 2K 字节从何而来?它们里面有什么?

于 2010-02-09T21:29:44.097 回答