SSRS报告查看器 - 报告图表无法在IE11中显示

时间:2015-01-20 15:55:22

标签: reporting-services internet-explorer-11

我有一个报告查看器控件,显示仪表板stye报告。 它有一些图表可供概述,但是在IE11中查看时,报告根本不会呈现,只显示空白。 底层存储过程也在运行。

我做了一些测试和

  • 图表显示在Firefox(当前)
  • 图表显示在Chrome(当前)
  • 图表显示在IE兼容模式中。
  • 如果我在我的网络浏览器上使用PDF导出功能,它可以将原始字节流转换为带有图表的正确PDF,这意味着报告可以正常运行。尝试最初显示报告时,底层存储过程仅运行一次。

我不确定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

文字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

1 个答案:

答案 0 :(得分:5)

缺少的IterationId帮助我找到了类似的场景。因为IE11将自己引入Mozilla客户端,因此IE11中的IterationId会因Chrome和Firefox而失败。 “用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64; Trident / 7.0; rv:11.0),像Gecko”

Devin Steinke在SQL Reporting Services - Viewer broken in Non-IE Browsers

上的这篇文章

在我的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

<强> 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"));
    }
}