【问题标题】:Response.WriteFile not working IE 10 on production serverResponse.WriteFile 在生产服务器上无法使用 IE 10
【发布时间】:2013-08-19 19:23:09
【问题描述】:

我在生产服务器上的 IE 10 中的 ASP.NET/VB Web 窗体应用程序(以 .NET 2.0 为目标)中的 Response.WriteFile 方法存在问题(我认为是)。基本上,这段代码已经到位,并且在 IE 10 之前已经运行了很多年。现在,当我通过 Visual Studio 在本地测试它时它运行良好,但是当它在生产服务器(Server 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 上如何工作,但在将其投入生产时无法工作。

这里是有问题的代码sn-p:

    ...
    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)
    ...

提前感谢您在解决此问题时提供的任何帮助、指导或指导。我在我的应用程序中的很多地方都有这个,所以找到一个根级别的修复程序比在它出现的每个地方修复它更可取。不幸的是,目前还不能升级到 .NET 4.5。

【问题讨论】:

    标签: asp.net vb.net report .net-2.0 internet-explorer-10


    【解决方案1】:

    我正在回答我自己的问题,以防以后可能出现的其他人可以从中受益。事实证明,据我所知,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()
    

    我尝试过使用

        Response.Flush()
        Response.Close()
    

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

    【讨论】:

    • 我还有一个问题,如果 Response.Buffer 设置为 False,IE 10 将无法正确显示经典 ASP 页面。如果页面只是相对复杂,编译时间超过一两秒,IE10 会随机忽略某些表格中的文本。
    【解决方案2】:

    替换 Response.Flush() 和 Response.Close() 与 HttpContext.Current.ApplicationInstance.CompleteRequest()

    【讨论】:

      【解决方案3】:

      我有同样的问题,它可以在我的本地机器上运行,但不能在 PROD 服务器上运行,这使我认为我的本地机器可能从 Microsoft 获得了更新,而 PROD 服务器尚未更新。我们正在测试的应用程序运行良好在 IE 兼容模式下,但在 IE 10 中得到了各种奇怪的东西。

      我要求使用 Microsoft 2 年前发布的热修复更新产品服务器。但是我的服务器上有 2.0 框架,所以我要求他们迁移到 3.5 框架并应用此修复程序。现在该应用程序运行良好,我无需将浏览器模式更改为 IE 10 兼容模式即可使用。

      这里是修复链接

      http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=2600088&kbln=en-us

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。我使用的是 Response.Close(),我将其替换为“Response.End()”,它就完成了这项工作。

        【讨论】:

          猜你喜欢
          • 2019-06-28
          • 2014-12-28
          • 1970-01-01
          • 2016-03-03
          • 2014-05-11
          • 1970-01-01
          • 2011-10-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多