【问题标题】:ReportViewer IE 11报告查看器 IE 11
【发布时间】:2014-03-26 11:13:05
【问题描述】:

我的 3.5 框架网络表单网站上有一个显示报告的页面。 它正在使用报表查看器 10.0.0.0。报告为除 IE11 之外的所有浏览器呈现。 只有以 doc 类型格式显示信息的报告才会呈现为 html 表格并存储在 .rdl 文件中。参数盒加载,但选择报告并运行时,我只需加载GIF即可。我尝试使用 IE11 开发工具进行故障排除,但它们在打开时超时,这是一场完美的风暴。另一点信息我在 VS2012 本地运行网站,而在 IE11 中它只是不在 IIS7 服务器上呈现。

我尝试了一个自定义 .browser 文件来模拟 IE10,但没有成功。任何帮助都将受到重视或just knowing I'm not the only one

更新:我在服务器日志中发现了异常。 HttpHandlerInputException,缺少 URL 参数:IterationId。

提前致谢。

【问题讨论】:

  • 您确定 rdl 已复制到目标吗?缺少参数听起来像是客户端和服务器之间的不匹配。
  • 您的网址也有可能被更改,您看到这个链接了吗? stackoverflow.com/q/705359/16391
  • 是的,StingyJack 在我检查了服务器日志并发现该位解决方案来得相当快之后。感谢您的帮助。
  • @KyleMit 在某种意义上我认为是对的:Chrome 的症状不同(严重程度要低得多),但根本原因是相同的。

标签: c# asp.net reportviewer internet-explorer-11


【解决方案1】:

在 cmets 中列出的 url 上找到它。我不敢相信,当微软推出新浏览器时,他们没有像我们一样进行测试,这是多么蹩脚。

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

【讨论】:

  • 感谢您提供这么重要的信息!我无法触摸我的 global.asax,所以我ended up doing the same thing with web.config rewrite rules
  • 虽然这对于大多数 SSRS 报告来说可能已经足够了,但我敢打赌,有时 IterationId 会设置为其他值,以便生成宽度不断增加的图像以创建适合任何级别的视觉标识报告呈现逻辑的深度目前正在“迭代”
  • MS Connect 链接似乎已中断。微软现在对如何处理这个问题有不同的建议吗?
  • @sq33G 很好,链接在 cmets 中不再有效。我找不到关于此问题的另一篇 Microsoft 文章。希望其他人将其添加到线程中。
  • 谢谢谢谢谢谢!在被困在同一个问题上数周后,我终于找到了你的问题和答案。我实施了 Jeroen 的解决方案,因为此时我更容易做到。您能否在我的问题stackoverflow.com/q/33419047/2615836 中参考您的答案?我很乐意为您的回答多加一个 +1。
【解决方案2】:

我也遇到了 ReportViewer 10 和 IE11 的问题。

升级到 ReportViewer 11 (Sql Server 2012) 解决了我的问题。

  • 下载并安装 MICROSOFT® REPORT VIEWER 2012 运行时: http://www.microsoft.com/en-us/download/confirmation.aspx?id=35747

  • 转到 GAC 文件夹: C:\Windows\assembly\gac_msil

  • 找到刚刚安装的 Microsoft.ReportViewer dll。

  • 将 Microsoft.ReportViewer.Common.dll 和 Microsoft.ReportViewer.webForms.dll 复制到本地 Web 文件夹。

  • 在您的解决方案引用中,删除对旧 ReportViewer 版本的所有旧引用,删除 web.config 和其他文件中的引用,并从 ToolBox 中删除控制。

  • 添加新的(通用和网络表单)dll 引用。

  • 将它们的属性设置为 Copy Local(复制到 bin 文件夹)。

  • 右键单击工具箱并添加 ReportViewer 11 控件(添加 Microsoft.ReportViewer.webForms.dll 引用)

  • 将控件放到页面上。

  • 这将在 web 配置文件和页面文件中添加引用。 在程序集中:

    <add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
    <add assembly="Microsoft.ReportViewer.Common, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
    
  • 您还需要在 web.config 文件中添加 2 个额外条目:

配置下,system.web,httphandlers:

<add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />

配置下,system.webserver,handlers:

<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />

注意: 这对我有用,无需在 Application_BeginRequest 方法中添加任何内容。 此外,我尝试了使用和不使用兼容性元标记,它在两种方式都有效。

【讨论】:

  • +1 - 我按照适用于我的设置的部分进行操作,效果很好。谢谢!
【解决方案3】:

@vikingben 的回答也是我回答的基础,但我想为我们这些无法轻易更改 global.asax c.q 的人提供一个利用 IIS 重写规则的解决方案。应用程序的 BeginRequest。这是我的规则:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="ReportViewerFix" patternSyntax="ECMAScript" stopProcessing="true">
        <match url="(.*)Reserved\.ReportViewerWebControl\.axd(.*)" ignoreCase="true" />
        <action type="Redirect"
                redirectType="Temporary"
                url="{R:1}/Reserved.ReportViewerWebControl.axd?IterationId=0"
                appendQueryString="true" />
        <conditions>
          <add input="{QUERY_STRING}" pattern="ResourceStreamID=Blank.gif" />
          <add input="{QUERY_STRING}" pattern="IterationId=0" negate="true" />
         </conditions>
      </rule>
    </rules>
  </rewrite>
</system.webServer>

这就是它的作用。它会找到所有 URL:

  1. 匹配某个正则表达式寻找 ReportViewer axd;还有
  2. 查询字符串包含“ResourceStreamID=Blank.gif”;还有
  3. 查询字符串包含“IterationId=0”。

对于任何匹配,浏览器都会被重定向(“临时”,但您也可以使用其他状态代码)到:

  1. 相同的axd url;与
  2. 附加“IterationId=0”;和
  3. 还附加了原始查询字符串。

【讨论】:

  • 谢谢谢谢谢谢!在被 ReportViewer 的问题困扰数周后,我终于找到了答案。
  • 您能否在我的问题stackoverflow.com/q/33419047/2615836 中引用您的答案?我很乐意为您提供答案。
  • @CodeswithHammer 不完全确定您所说的“参考”是什么意思。你的意思是我在这里的回答也是你其他问题的回答吗?如果是这样,我建议(a)在此处标记您自己的问题的副本,或者如果它在技术上不是一个骗局,那么(b)自行回答您自己的问题并在您闲暇时在您的问题中重新混合/使用我的答案,并且接受那个答案(技术上需要的只是一个链接+归属,就像我所做的那样,因为我的答案也是另一个答案的混音。但我并不大惊小怪,很高兴你找到了解决问题的方法。)。
【解决方案4】:

我有同样的问题。解决方案是将站点添加到 Internet Explorer 的兼容性视图站点列表中。然后页面呈现没有问题。

【讨论】:

    【解决方案5】:

    转到 IE 设置然后兼容性视图设置,然后在“添加此网站”选项中添加您的项目网站。

    【讨论】:

      【解决方案6】:

      我有同样的问题,使用 IE11/SQL2012/WinServer2012。无论我使用报表查看器的版本 10、11 还是 12,都没有区别。我通过将调用报告的 vb.net 代码放在这样的 if 语句中来解决它:

      if not IsPostBack then
          // code to call report goes here
      end if
      

      我从跟踪日志中注意到,有时会多次调用报告代码,我记得在报告查看器示例中的某处使用过回发条件并将其放入。报告已完美加载。

      【讨论】:

      • Stackoverflow 的问题和答案遵循 Markdown 语言特性。所以在一行前加 4 个空格,就是把它当作一个代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2018-11-14
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多