【问题标题】:VS2010 ReportViewer keeps loading with Windows Azure Reporting ServiceVS2010 ReportViewer 不断加载 Windows Azure 报告服务
【发布时间】:2012-09-25 09:27:59
【问题描述】:

通过 VS2010,我开始了一个全新的 Azure 项目,其中有一个 MVC2 webrole,它只有一个 Asp.Net webform强>。

问题

我遇到了一个问题,我的 ReportViewer 一直在加载,我无法让它与版本 10.0 一起正常工作?版本9.0 工作起来很迷人,但我找不到这两者之间的区别。

Internet Explorer 一直在闪烁,但使用 Chrome 的“检查器”我可以看到出现以下错误:

<h2> Report Viewer Configuration Error </h2><p>The Report Viewer Web Control HTTP Handler has not been registered in the application&#39;s web.config file. Add &lt;add verb=&quot;*&quot; path=&quot;Reserved.ReportViewerWebControl.axd&quot; type = &quot;Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot; /&gt; to the system.web/httpHandlers section of the web.config file, or add &lt;add name=&quot;ReportViewerWebControlHandler&quot; preCondition=&quot;integratedMode&quot; verb=&quot;*&quot; path=&quot;Reserved.ReportViewerWebControl.axd&quot; type=&quot;Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot; /&gt; to the system.webServer/handlers section for Internet Information Services 7 or later.</p>

到目前为止我做了什么

我只拖放了一个ScriptManagerReportViewer(根据多个站点上的建议)。
项目引用是自动创建的,并且 web.config 的程序集看起来不错。

    <add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
    <add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />

我要做的下一步是将处理程序添加到 web.config:

<system.web>
   <httpHandlers>
      <add path="Reserved.ReportViewerWebControl.axd" verb="*" 
      type="Microsoft.Reporting.WebForms.HttpHandler, 
      Microsoft.ReportViewer.WebForms, Version=10.0.0.0, 
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" 
      />
   </httpHandlers>
</system.web>

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="true" />

  <!-- added handler for reporting -->
  <handlers>
    <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </handlers>
</system.webServer>

之后,我在&lt;script runat="server"&gt;&lt;/script&gt; 中设置报告属性,以便我可以轻松调试。

我的网络表单

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="MvcWebRole1.Reports.Report" %>

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            ReportViewer1.ProcessingMode = ProcessingMode.Remote;
            ReportViewer1.ServerReport.ReportServerUrl = new Uri("https://XXXX.reporting.windows.net/ReportServer");
            ReportViewer1.ServerReport.ReportPath = "/MyReport.rdl";
            ReportViewer1.ServerReport.ReportServerCredentials = new Credentials();
        }

        public class Credentials : IReportServerConnection
        {
            public IEnumerable<System.Net.Cookie> Cookies { get { return null; } }
            public Uri ReportServerUrl { get { return new Uri("https://XXXX.reporting.windows.net/ReportServer"); } }
            public int Timeout { get { return 60000; } }

            public bool GetFormsCredentials(out System.Net.Cookie authCookie, out string userName, out string password, out string authority)
            {
                authCookie = null;
                userName = "MyUserName";
                password = "MyPassword";
                authority = "XXXX.reporting.windows.net";
                return true;
            }
            public System.Security.Principal.WindowsIdentity ImpersonationUser { get { return null; } }
            public System.Net.ICredentials NetworkCredentials { get { return null; } }
        }

    </script>
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <rsweb:ReportViewer ID="ReportViewer1" runat="server">
        </rsweb:ReportViewer>
    </div>
    </form>
</body>
</html>

下一步是什么?

有没有人知道我该如何解决这个问题!?

到目前为止:

  1. 报告版本 10.0
  2. Web.config 对于程序集和处理程序看起来也不错
  3. 我尝试了 Visual Studio 调试器
  4. 我试过 IIS Express
  5. 我尝试了一个 Windows Azure 项目(带模拟器)

【问题讨论】:

    标签: c# asp.net reporting-services azure webforms


    【解决方案1】:

    你试过在system.web中添加httpHandler吗?

    <system.web>
       <httpHandlers>
          <add path="Reserved.ReportViewerWebControl.axd" verb="*" 
          type="Microsoft.Reporting.WebForms.HttpHandler, 
          Microsoft.ReportViewer.WebForms, Version=10.0.0.0, 
          Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" 
          />
       </httpHandlers>
    </system.web>
    

    【讨论】:

    • 现在我已经开始工作了,我可以确认这个处理程序不是必需的。
    • 我正在检查if(!IsPostBack),看看我自己的答案
    【解决方案2】:

    在用与您的设置类似但使用 MVC3 和 2012 的情况下调试了类似的报告查看器问题之后,我可以告诉您,您可以看到的 HttpHandler 块是一个红鲱鱼。即使一切正常,报表查看器控件也会输出该 HTML 块。

    如果您的问题与我的问题相同,请检查传递到报告中的参数。如果其中任何一个是“”,则不会加载报表查看器。将该参数更改为 " " 或者只是不传递它。恐怕我没有充分的理由解释为什么会这样。

    【讨论】:

    • 感谢您的意见!我没有传递任何参数,我发现它为什么不起作用。无论如何,事实证明这个“消息”总是存在的!我在 Azure 管理门户上查看了它的报告查看器,它也在那里!
    【解决方案3】:

    嗯,“错误信息”似乎一直都在,等待显示!!所以不要让它愚弄你!

    最后我非常接近我的解决方案...我只需要添加一个简单的行(只花了我几个小时):

    if(!IsPostBack){
        // All my ReportViewer1 stuff goes here
    }
    

    我发现这个页面也非常有用:Configuring ReportViewer for Asynchronous Rendering

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多