Response.WriteFile 在生产服务器上无法运行 IE 10

Veg*_*don 1 vb.net asp.net report .net-2.0 internet-explorer-10

我在生产服务器上的 IE 10 中的 ASP.NET/VB Web Forms 应用程序(针对 .NET 2.0)中的 Response.WriteFile 方法遇到问题(我认为是)。基本上,这段代码已经就位,并且在 IE 10 之前一直工作多年。现在,当我通过 Visual Studio 在本地测试它时,它工作得很好,但当它在生产服务器(服务器 2008 R2、IIS 7)上时,我收到错误消息,无法下载该文件。当我强制执行时,我得到了一个损坏的 PDF。我正在使用 Crystal Reports X 生成 PDF。任何愿意帮助我用正确的措辞来研究这个问题的人都将得到我无尽的感激!我已经尝试了 IE 10 的所有兼容模式。我已根据 Scott Hanselman http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx更新了 App_Browsers 文件夹中的浏览器定义文件。作为一个相对新手开发人员,我不确定我错过了什么,它如何通过 VS 在 IE 10 上工作,但当我将其投入生产时却不起作用。

这是有问题的代码片段:

    ...
    Response.ContentType = "application/pdf"
    Response.AddHeader("content-disposition", "attachment; filename=ThisReport_" & Server.UrlEncode(Me.ReportName.Text & "_" & Now.Month.ToString() & "_" & Now.Day.ToString() & "_" & Now.Year.ToString()) & ".pdf")

    Response.WriteFile(strFileName)
    ...
Run Code Online (Sandbox Code Playgroud)

预先感谢您为解决此问题提供的任何帮助、指导或指示。我的应用程序中的许多地方都有这个问题,因此找到根级修复比在它出现的每个地方修复它更好。不幸的是,目前无法升级到 .NET 4.5。

Veg*_*don 5

我正在回答我自己的问题,以防以后可能出现的其他人可以从中受益。事实证明,据我所知,IE 10 中的一项更改影响了 ASP.NET 2.0(或其他版本,我不确定)中的响应对象。我能够通过添加...来解决我的问题

    Response.ClearContent()
    Response.ClearHeaders()
    Response.Clear()
    Response.Buffer = True
    Response.ContentType = "application/pdf"
    Response.AddHeader("content-disposition", "attachment; filename=ThisReport_" & Server.UrlEncode(Me.ReportName.Text & "_" & Now.Month.ToString() & "_" & Now.Day.ToString() & "_" & Now.Year.ToString()) & ".pdf")
    Response.WriteFile(strFileName)        
    Response.End()
Run Code Online (Sandbox Code Playgroud)

我尝试使用

    Response.Flush()
    Response.Close()
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到的是 HTML 页面而不是 PDF 内容。这已经解决了我的问题,尽管关于 ASP.NET 和 IIS 的内部工作原理还有很多我还没有学习。请根据需要随意添加。