Report Viewer 控件不显示来自 SSRS 的报告
Report Viewer control not showing report from SSRS
我在 VS 2013 中使用 MS Report Viewer 10;该项目正在从 VS 2010 升级。我已经解决了一系列与 Report Viewer 相关的问题,并让控件本身启动并 运行ning。我在 SSRS 中有很多报告,我已经确认报告本身可以正常工作。
我有一个用于数据输入的 Web 窗体 ASPX 页面。它通过 JSON 将数据传递到包含报表查看器控件的弹出式 ASPX 页面。
我正在 运行ning IIS Express 7、SQL Server 2008 R2 (v10.50) 和 .NET Framework 4.5 的当前目标框架。
Report Viewer 没有 return 任何报告 -- 没有错误消息,没有报告布局缺失数据,当然也没有完整的报告。当我 运行 通过 VS 使用相同输入的相同报表时,报表预览显示我期望的结果。
ProcessingMode
设置为 Remote
,ReportServerCredentials
为 null
。我研究了这意味着什么,这意味着 Report Viewer 应该使用当前网络凭据(即当前用户)连接到 SSRS。我确认当前用户与我当前的登录正确匹配;我可以正确使用 Windows 身份验证连接到 SSRS 和 SQL 服务器。
ReportViewer 不是在 Web 表单设计器中创建的,因此我无法在设计时为其设置任何属性。
所以我怀疑我的问题是 运行 时的身份验证问题。我不知道如何调查和解决这个问题。
页面控制代码:
<ssrs:ReportViewer ID="ReportViewer" runat="server" ProcessingMode="Remote" Width="100%"
Height="690" ShowParameterPrompts="false" AsyncRendering="false"/>
在我尝试 运行 报告后,SSRS 日志包含以下条目:
library!ReportServer_0-3!1dc8!(datetime): i INFO: RenderForNewSession('(report)')
webserver!ReportServer_0-3!1dc8!(datetime, 1 second later): i INFO: Processed report. Report='(report)', Stream=''
遗留项目使用 MS Report Viewer 9。运行 很好。我在 web.config
中看到的唯一变化与更高版本以及从 IIS 6 到 IIS 7 的变化有关。
由于它出现在评论中,这里是来自 web.config 的相关行:
<system.webServer>
<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>
我的报告查看器window:
预计 11 月 24 日:我最终在应用程序日志中得到了一个条目:HttpHandlerInputException, Missing URL parameter: IterationId
。此问题已在 another STOF Q&A.
中讨论
当您在您的应用程序中更新 SSRS 控件的版本时,web.config您还需要在 IIS 中为其添加一个新的处理程序。如果您之前的映射中有一个,请将其删除并添加一个新的。
- 打开 IIS 管理器并select您的应用程序在 IIS 部分下
- 双击
上“操作”窗格中的“处理程序映射”图标
- 右键单击“添加托管处理程序”
对话框打开后输入以下内容:
请求路径:Reserved.ReportViewerWebControl.axd
类型:Microsoft.Reporting.WebForms.HttpHandler
名称: Reserved-ReportViewerWebControl-axd
点击确定
还要确保您的服务器、凭据和报告路径正确无误。
var serverReport = this.ReportViewer1.ServerReport;
serverReport.ReportServerCredentials = new ReportServerCredentials(userName, password, "yourDomain.com");
serverReport.ReportServerUrl = new Uri("your report server");
serverReport.ReportPath = "yourReportName";
serverReport.Refresh();
在你的 aspx 中:
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
下面是我用来将 ReportViewer 与 SSRS 报告绑定的代码片段
ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerNetworkCredentials("ReportServerUsername", "ReportServerPassword", "");
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://mymachinename//ReportServer");
ReportViewer1.ServerReport.ReportPath = "/MyReports/TestReport1";
这里的 ReportServerUrl 是 SQL 在我的机器和 ReportPath 中配置的报告服务器 (SSRS) 的路径 "MyReports" 是 SQL 报告服务器中的文件夹,其中我有一个名为 TestReport1[ 的报告=11=]
应@CodeswithHammer 的要求,我将此引用添加到另一个线程,只是为了节省人们搜索它的时间。
我在 VS 2013 中使用 MS Report Viewer 10;该项目正在从 VS 2010 升级。我已经解决了一系列与 Report Viewer 相关的问题,并让控件本身启动并 运行ning。我在 SSRS 中有很多报告,我已经确认报告本身可以正常工作。
我有一个用于数据输入的 Web 窗体 ASPX 页面。它通过 JSON 将数据传递到包含报表查看器控件的弹出式 ASPX 页面。
我正在 运行ning IIS Express 7、SQL Server 2008 R2 (v10.50) 和 .NET Framework 4.5 的当前目标框架。
Report Viewer 没有 return 任何报告 -- 没有错误消息,没有报告布局缺失数据,当然也没有完整的报告。当我 运行 通过 VS 使用相同输入的相同报表时,报表预览显示我期望的结果。
ProcessingMode
设置为 Remote
,ReportServerCredentials
为 null
。我研究了这意味着什么,这意味着 Report Viewer 应该使用当前网络凭据(即当前用户)连接到 SSRS。我确认当前用户与我当前的登录正确匹配;我可以正确使用 Windows 身份验证连接到 SSRS 和 SQL 服务器。
ReportViewer 不是在 Web 表单设计器中创建的,因此我无法在设计时为其设置任何属性。
所以我怀疑我的问题是 运行 时的身份验证问题。我不知道如何调查和解决这个问题。
页面控制代码:
<ssrs:ReportViewer ID="ReportViewer" runat="server" ProcessingMode="Remote" Width="100%"
Height="690" ShowParameterPrompts="false" AsyncRendering="false"/>
在我尝试 运行 报告后,SSRS 日志包含以下条目:
library!ReportServer_0-3!1dc8!(datetime): i INFO: RenderForNewSession('(report)')
webserver!ReportServer_0-3!1dc8!(datetime, 1 second later): i INFO: Processed report. Report='(report)', Stream=''
遗留项目使用 MS Report Viewer 9。运行 很好。我在 web.config
中看到的唯一变化与更高版本以及从 IIS 6 到 IIS 7 的变化有关。
由于它出现在评论中,这里是来自 web.config 的相关行:
<system.webServer>
<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>
我的报告查看器window:
预计 11 月 24 日:我最终在应用程序日志中得到了一个条目:HttpHandlerInputException, Missing URL parameter: IterationId
。此问题已在 another STOF Q&A.
当您在您的应用程序中更新 SSRS 控件的版本时,web.config您还需要在 IIS 中为其添加一个新的处理程序。如果您之前的映射中有一个,请将其删除并添加一个新的。
- 打开 IIS 管理器并select您的应用程序在 IIS 部分下
- 双击 上“操作”窗格中的“处理程序映射”图标
- 右键单击“添加托管处理程序”
对话框打开后输入以下内容:
请求路径:Reserved.ReportViewerWebControl.axd
类型:Microsoft.Reporting.WebForms.HttpHandler
名称: Reserved-ReportViewerWebControl-axd
点击确定
还要确保您的服务器、凭据和报告路径正确无误。
var serverReport = this.ReportViewer1.ServerReport;
serverReport.ReportServerCredentials = new ReportServerCredentials(userName, password, "yourDomain.com");
serverReport.ReportServerUrl = new Uri("your report server");
serverReport.ReportPath = "yourReportName";
serverReport.Refresh();
在你的 aspx 中:
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
下面是我用来将 ReportViewer 与 SSRS 报告绑定的代码片段
ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerNetworkCredentials("ReportServerUsername", "ReportServerPassword", "");
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://mymachinename//ReportServer");
ReportViewer1.ServerReport.ReportPath = "/MyReports/TestReport1";
这里的 ReportServerUrl 是 SQL 在我的机器和 ReportPath 中配置的报告服务器 (SSRS) 的路径 "MyReports" 是 SQL 报告服务器中的文件夹,其中我有一个名为 TestReport1[ 的报告=11=]
应@CodeswithHammer 的要求,我将此引用添加到另一个线程,只是为了节省人们搜索它的时间。