在IIS 7.5中提供PDF文件的问题

Chr*_*ell 4 pdf iis iis-7.5

这是一个非常奇怪的问题 - 任何想法/帮助/提示将不胜感激.

我们的网络应用程序使用以下代码将PDF文件流式传输到浏览器

byte [] fileBytes = GetTheFileBytes();
string contentType = "application/pdf";

context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ContentType = contentType;
context.Response.AddHeader("Content-Length", fileBytes.Length.ToString());
context.Response.AddHeader("Content-Type", contentType);

MemoryStream outputStream = new MemoryStream(fileBytes);
outputStream.WriteTo(context.Response.OutputStream);
context.Response.Flush();
Run Code Online (Sandbox Code Playgroud)

这似乎非常无害并且在IIS 6和IIS 7中运行良好:如果用户安装了PDF插件(adobe或foxit等),则PDF将显示在他们的浏览器中.

但是,在IIS 7.5(Windows 7和Win 2008 R2)中,Foxit插件在IE中挂起,Adobe插件在IE和FF中挂起.即如果我进入

http://iis70Host/application/getPDF.aspx一切都很好,但 http://iis75Host/application/getPDF.aspx在同一个浏览器中挂起.

我正在为完全相同的浏览器提供完全相同的PDF文件,并且两个Web服务器都在2.0框架中运行应用程序.

当它们崩溃时,我还没有设法从任一插件中获取有用的错误消息.

我认为IIS 7.5正在以某种方式破坏文件(因为客户端浏览器和插件是相同的) - 但我发现很难想象Web服务器如何变得错误(它只是流式二进制到客户端之后)所有).

  • 任何人都可以想到为什么行为将是不同的IIS 7.0和7.5?
  • 有谁知道如何从Adobe或foxit插件中获取更多调试信息?(如果我能得到他们崩溃的原因,那么也许它会给我一个关于服务器上出了什么问题的线索).
  • 诊断问题的其他任何提示?

跟进

  • 我使用wget捕获了文件,它们完全相同.

  • 我已经看过使用fiddler的请求和响应头,并且它们没有明确提到响应头中的"Range"(或请求头中的Accept-range),这说明了这是多部分请求的可能性mwalker建议的问题.

  • 我继续安装了MS Hotfix,但这对情况没有帮助(因此我更确定它不是"多部分问题").

所以我想我回来乞求更多关于可能出错的想法!

下面是fiddler访问运行IIS 7.5,7.0和6的主机时记录的请求和响应标头

IIS 7.5

GET /eco/dataFile.aspx?data=147098&record=9754 HTTP/1.1
Host: chrisf
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://chrisf/eco/embeddedMedia.aspx?record=9754&search=true
Cookie: CC=test; 

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 114340
Content-Type: application/pdf
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Persistent-Auth: true
X-UA-Compatible: IE=8
Date: Mon, 26 Jul 2010 12:47:46 GMT
Run Code Online (Sandbox Code Playgroud)

IIS 7.0

GET /eco/dataFile.aspx?data=147098&record=9754 HTTP/1.1
Host: chris1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://chrisf/eco/Test1.htm
Cookie: CC=test; 

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 114340
Content-Type: application/pdf
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-UA-Compatible: IE=8
Date: Mon, 26 Jul 2010 12:17:15 GMT
Run Code Online (Sandbox Code Playgroud)

IIS 6

GET /mi/dataFile.aspx?data=147098&record=9754 HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://mi-dev/mi/embeddedMedia.aspx?record=9754&search=true
Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: mi-dev
Connection: Keep-Alive
Cookie: CC=test; 
Authorization: Negotiate YII...

HTTP/1.1 200 OK
Date: Mon, 26 Jul 2010 10:37:47 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
WWW-Authenticate: Negotiate oYGg...
X-AspNet-Version: 2.0.50727
Content-Length: 114340
Cache-Control: private
Content-Type: application/pdf
Run Code Online (Sandbox Code Playgroud)

Chr*_*ell 6

好.一位工作同事终于弄明白了.

{这些论坛上的任何人都无法帮助解决这个问题,因为看起来我对问题的描述错了,并且没有说PDF插件位于IFrame内(这是一条对查找至关重要的信息)原因).但无论如何要感谢尝试:)}

无论如何,这里的问题实际上似乎是: -

IF的PDF插件是在一个IFrame ANDX-UA-Compatible: IE=8存在,则该插件崩溃在IE中.

我们的解决方案只是删除X-UA-Compatible: IE=8标题.这个标题在一段时间之后作为一个快速修复来修复一些IE渲染问题,但我们已经重新编写HTML + CSS,现在它是多余的).它包含在web.config中就像这样

   <httpProtocol>
          <customHeaders>
              <clear />
              <add name="X-UA-Compatible" value="IE=8" />
          </customHeaders>
      </httpProtocol>

我们在IIS6上没有看到这个问题的原因似乎是IIS 6不尊重这个并且根本没有发送头!

<借口>

我99%肯定这是问题:1%的疑问仍然是因为他无法在Firefox上重现问题(这是IE唯一的问题),他发现他可以在IIS 7和7.5上重现问题.

但我坐下来看着他重现这个错误并修复它所以要么a)我的旧机器被诅咒或b)我只是一个白痴,当看到臭虫开始并迷茫.你决定.我没有提到插件是在IFrame中,因为我错误地认为这是一个不相关的细节.

[我第一次尝试使用这个bug的机器已经变成了一个构建服务器,所以我不能回到那个,看看我是否可以在Firefox上重现]

</借口>