cra*_*aus 4 reporting-services internet-explorer-11
我有一个报告查看器控件,显示一个仪表板stye报告.它有一些图表可供概述,但是在IE11中查看时,报告根本不会呈现,只显示空白.底层存储过程也在运行.
我做了一些测试
我不确定IE是如何与webviewer控件交互的问题.
更新 - 凭借Fiddler的魔力,它看起来像是一个错误被吃掉而且在请求blank.gif时没有显示,这似乎是我认为结果gif的占位符.URL中缺少IterationId.奇怪的是,审查FireFox和Chrome的Fiddler跟踪结果时,会出现与URL中遗漏的IterationId相同的错误,但图表仍然显示.我认为这仍然是问题所在.
请求标头
GET /Reserved.ReportViewerWebControl.axd?ReportSession=....&Culture=1033
&CultureOverrides=True&UICulture=1033&UICultureOverrides=True
&ReportStack=1&ControlID=...
&OpType=ReportImage&ResourceStreamID=Blank.gif HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
文本Resonse
[HttpHandlerInputException: Missing URL parameter: IterationId]
Microsoft.Reporting.WebForms.HandlerOperation.GetAndEnsureParam(NameValueCollection urlQuery, String paramName) +104
Microsoft.Reporting.WebForms.ReportImageOperation.PerformOperation(NameValueCollection urlQuery, HttpResponse response) +102
Microsoft.Reporting.WebForms.HttpHandler.ProcessRequest(HttpContext context) +380
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +599
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171
Run Code Online (Sandbox Code Playgroud)
缺少的IterationId帮助我找到了类似的场景.因为IE11将自己引入Mozilla客户端,所以IterationId在IE11中会像Chrome和Firefox一样失败."用户代理:Mozilla/5.0(Windows NT 6.1; WOW64; Trident/7.0; rv:11.0),像Gecko"
根据Devin Steinke撰写的关于SQL Reporting Services的文章 - 非IE浏览器中的查看器
在我的Global.asax代码后面,我只将IterationId参数附加到ReportViewerWebControl blank.gif的请求上.它现在可以在IE11中运行,并且仍然适用于FireFox,Chrome和旧版本的IE.
你不会再看到fiddler的异常,结果文本显示了GIF的检索,在我的例子中是"GIF89a".
VB.NET:
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim pathQuery = HttpContext.Current.Request.Url.PathAndQuery
Dim url = HttpContext.Current.Request.Url.ToString().ToLower()
If pathQuery.StartsWith("/Reserved.ReportViewerWebControl.axd") And Not url.Contains("iteration") Then
Dim resourceStreamId = HttpContext.Current.Request.QueryString("ResourceStreamId")
If IsNothing(resourceStreamId) Then Return
If resourceStreamId.ToString().Equals("blank.gif", StringComparison.InvariantCultureIgnoreCase) Then
Context.RewritePath(String.Concat(HttpContext.Current.Request.Url.PathAndQuery, "&IterationId=0"))
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
C#:
void Application_BeginRequest(object sender, EventArgs e)
{
// Bug fix for MS SSRS Blank.gif 500 server error missing parameter IterationId
// https://connect.microsoft.com/VisualStudio/feedback/details/556989/
if (HttpContext.Current.Request.Url.PathAndQuery.StartsWith("/Reserved.ReportViewerWebControl.axd") &&
!String.IsNullOrEmpty(HttpContext.Current.Request.QueryString["ResourceStreamID"]) &&
HttpContext.Current.Request.QueryString["ResourceStreamID"].ToLower().Equals("blank.gif"))
{
Context.RewritePath(String.Concat(HttpContext.Current.Request.Url.PathAndQuery, "&IterationId=0"));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4009 次 |
| 最近记录: |