SSRS2008 ASP.NET ServerReport在IE11上与OEM UserAgent失败

时间:2014-01-02 15:06:44

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

我将SSRS ServerReport渲染为PDF,并在带有SQL Server报告服务2008的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

MALC MATM NP06 似乎是OEM字符串,不属于通常的IE11 UserAgent。
在IE开发人员工具用户代理设置中删除这些字符串会使一切正常,但不是最终用户的解决方案。

我尝试过的事情:

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

工作原理:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

通过提供此XML片段作为参数

,可以在调用SOAP API的Render方法时完成此操作
<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

参考