Asp.net IIS 6是否忽略了内容长度标头?

Asp.net IIS 6是否忽略了内容长度标头?,asp.net,iis,http-headers,Asp.net,Iis,Http Headers,我正在开发一个web应用程序,它可以保存上传的文件。文件存储在SQL数据库的“image”列中,并使用Response.BinaryWrite()通过GetFile.aspx页面提供服务 直到昨天,我在下载Office2007/2010文件时遇到了问题。该文件可以顺利下载,但当Word(或Excel,或任何Office程序)打开它时,它会抱怨文件已损坏。但它仍将开放,不会立即出现任何明显问题或丢失数据。解决方案是在响应中包含一个内容长度头: If dr.Read() Then Respons

我正在开发一个web应用程序,它可以保存上传的文件。文件存储在SQL数据库的“image”列中,并使用Response.BinaryWrite()通过GetFile.aspx页面提供服务

直到昨天,我在下载Office2007/2010文件时遇到了问题。该文件可以顺利下载,但当Word(或Excel,或任何Office程序)打开它时,它会抱怨文件已损坏。但它仍将开放,不会立即出现任何明显问题或丢失数据。解决方案是在响应中包含一个内容长度头:

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

这在我的本地开发机器(Windows7、IIS7.5、ASP 2.0)上非常有效。下载并打开的文件没有问题。但是在我们的测试服务器(WindowsServer2003,IIS6)上,这仍然是一个问题。我使用WireShark查看了流量,发现我的内容长度标题不存在!我正在设置的所有其他内容(包括测试标题:
Response.AppendHeader(“TestHeader”,“TestValue”)
都会显示出来。我确保ContentSize在我获取的数据中有一个值,我甚至尝试将其更改为
Response.AppendHeader(“Content Length”,“1234567”)
,以便只在其中获取一个值。没有显示任何内容

我还尝试了Fiddler来查看流量;我的开发机器确实包含content length属性(尽管它显然关闭了一个字节…Fiddler报告了协议冲突),而测试服务器没有


发生了什么?IIS 6是否出于某种原因忽略了标头?是否有需要更改的设置?

您如何存储dr(“ContentSize”)值?可能实际文件内容长度和存储值可能与windows server 2k3显式检查的不同。请看以下设置字符串内容长度的代码,例如:byte[]s=Encoding.UTF8.GetBytes(resultString);response.AddHeader(“Content-Length”,s.Length.ToString());@DSharper-它是数据库中的一个int,该值是从HtmlInputFile.PostedFile的ContentLength属性中获取的。正如我在问题中所指出的,Fiddler抱怨它被关闭了一个字节;你是说IIS 6会因此忽略标头吗?你是如何存储dr(“ContentSize”)的值?windows server 2k3显式检查的实际文件内容长度和存储值可能不同。请查看以下设置字符串内容长度的代码,例如:byte[]s=Encoding.UTF8.GetBytes(resultString);response.AddHeader(“content length”,s.length.ToString());@DSharper-它是数据库中的一个int,该值是从HtmlInputFile.PostedFile的ContentLength属性中获取的。正如我在问题中所指出的,Fiddler抱怨它被关闭了一个字节;你是说IIS 6会因此忽略标头吗?