1

我在生产服务器上的 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 更新了 App_Browsers 文件夹中的浏览器定义文件http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx。作为一个相对新手开发人员,我不确定我在 IE 10 上如何通过 VS 工作,但在将其投入生产时无法工作。

这是有问题的代码片段:

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

4

4 回答 4

4

我正在回答我自己的问题,以防以后可能出现的其他人可以从中受益。事实证明,据我所知,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 的内部工作原理我还没有学习。如有必要,请随时添加。

于 2013-03-26T01:41:14.930 回答
0

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

于 2013-05-14T21:14:42.027 回答
0

我有同样的问题,它可以在我的本地机器上工作,但不能在 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

于 2013-06-10T21:00:34.500 回答
0

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

于 2013-08-19T11:23:09.307 回答