C# SSRS2008 ASP.NET ServerReport在具有OEM UserAgent的IE11上失败

C# SSRS2008 ASP.NET ServerReport在具有OEM UserAgent的IE11上失败,c#,asp.net,reporting-services,ssrs-2008,internet-explorer-11,C#,Asp.net,Reporting Services,Ssrs 2008,Internet Explorer 11,我正在使用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 M

我正在使用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
MALC、MATM和NP06似乎是OEM字符串,不属于通常的IE11用户代理。 在IEs developer tools用户代理设置中删除这些字符串可以使一切正常工作,但对最终用户来说并不是一个解决方案

我尝试过的事情:

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

拦截请求并使用HttpWebRequest和其他UserAgent发出自定义请求,来回复制Cookie会话id和请求/响应头。 我觉得这是一个可怕的解决方案,不应该这样做

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

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

这可以在调用SOAP API的呈现方法时通过提供此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

参考资料

Reporting Services设备信息设置

HTML设备信息设置