【问题标题】:SSRS2008 ASP.NET ServerReport fails on IE11 with OEM UserAgentSSRS2008 ASP.NET ServerReport 在 IE11 上使用 OEM UserAgent 失败
【发布时间】:2014-01-02 15:06:43
【问题描述】:

我正在使用 SQL Server Report Service 2008 将 SSRS ServerReport 渲染为 PDF 并在 ASP.NET 3.5 应用程序的 ReportViewer WebForm 控件中。

一些使用 Internet Explorer 11 的用户报告说他们无法打开生成的 PDF 文件或在查看器中查看任何内容。 渲染失败并出现此错误:

library!ReportServer_0-403!7c8!01/02/2014-11:07:37:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: , Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: Interner Fehler beim Berichtsserver. Weitere Informationen finden Sie im Fehlerprotokoll. ---> System.ArgumentNullException: Value cannot be null.
Parameter name: String
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.Web.Configuration.HttpCapabilitiesBase.get_MajorVersion()
   at Microsoft.ReportingServices.Diagnostics.Utilities.BrowserDetectionUtility.GetBrowserInfoFromRequest(HttpRequest request)
   at Microsoft.ReportingServices.Diagnostics.RSRequestParameters.SetBrowserCapabilities(HttpRequest request)
   at Microsoft.ReportingServices.Library.RenderReportAction.SetBrowserCapabilities()
   at Microsoft.ReportingServices.Library.RenderReportAction.PerformExecution()
   at Microsoft.ReportingServices.Library.RenderReportAction.Render()
   --- End of inner exception stack trace ---;

我可以将这些错误追溯到 IE11 的 UserAgent 中使用的 OEM 字符串。

例子:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MALC; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATM; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; rv:11.0) like Gecko

MALCMATMNP06 似乎是 OEM 字符串,不是通常的 IE11 UserAgent 的一部分。
在 IE 开发者工具用户代理设置中删除这些字符串可以使一切正常工作,但不是最终用户的解决方案。

我尝试过的事情:

  • 在 ASP.NET 应用程序中覆盖传入请求的 UserAgent,但无论我设置什么,它似乎都不会改变。 (我可能做错了,我发现我无法改变它所以我还是尝试了)
  • 覆盖 Global.asax 中 Begin-/EndRequest 事件的标头
  • 在应用程序本身的 App_Browser 目录和 SSRS 服务器应用程序上添加自定义 .browser 文件

有什么作用:

  • 拦截请求并使用具有不同 UserAgent 的 HttpWebRequest 发出自定义请求,来回复制 cookie(会话 ID)和请求/响应标头。

我觉得这是一个糟糕的解决方案,不应该这样做。

如何让 SSRS 在解析 IE11s UserAgent 时不抛出错误?
有没有办法禁用它或添加自定义正则表达式来手动解析它?

【问题讨论】:

    标签: c# asp.net reporting-services ssrs-2008 internet-explorer-11


    【解决方案1】:

    您可以通过提供其他设备信息来覆盖报表服务器的用户代理。

    这可以在调用 SOAP API 的 Render 方法时通过提供此 XML 片段作为参数来完成

    <DeviceInfo>
        <UserAgent>custom_user_agent_here</UserAgent>
    </DeviceInfo>
    

    或者像这样使用 URL 访问

    http://<Server Name>/reportserver?/SampleReports/Sales Order Detail&rs:Command=Render&rs:Format=HTML4.0&rc:UserAgent=custom_user_agent_here
    

    .

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2018-05-16
      • 2016-05-13
      • 2022-01-01
      • 1970-01-01
      • 2015-12-11
      相关资源
      最近更新 更多