4

SQL Reporting Services 问题 - 针对 SQL Server 2008。

鉴于 SQL Server Reporting Services 具有可用于调度 SQL 报表运行的调度程序,是否有人知道以编程方式(通过 C#)从报表服务器读取报表历史记录的方法(然后可能检索报表的结果)?

因此,经过更多的挖掘,看起来我需要为报表服务器生成一个 WSDL,然后使用 ReportingService 对象访问信息——以前有没有人做过(2008 年)并且可以提供一些指针?

注意:看起来(根据 SQL 2008 在线书籍)SQL 2008 的 WSDL 地址是:

http://server/reportserver/ReportService2005.asmx?wsdl

如果我能做到这一点,我将发布一个包含实现它的基本步骤的答案:) 这有点令人困惑,因为文档是 SQL 2000 和 SQL 2005 参考的混合体!

4

2 回答 2

2

好的,所以我实际上已经想出了如何完成这个看似不可能的任务。

在开始之前,我只想说,如果您正在使用 SQL Server Reporting Services 2008 (SSRS 08) 并且不得不(即您别无选择)使用基本身份验证之类的东西,那么您只会发现基于 WCF 的服务存根和 IIS。稍后我将在博客中介绍配置。

简短的回答如下:

  • 连接(例如 new ReportingService2005() 或 ReportingService2005SoapClient())

注意:使用旧的(WCF 之前的)ASMX 服务更容易,但使用新的 CF 版本并非不可能。身份验证需要一些配置。版本之间也有一些细微的语法变化。

  • 找到您要查找的报告历史记录,例如 ReportHistorySnapshot[] history = reportServer.ListReportHistory(@"/Reports/MyHandyReport");
  • 从您想要的任何快照中获取 HistoryID(从 ListHistoryReport 返回)
  • 现在,使用 ReportViewer 来呈现历史报告,就像您处理任何其他报告一样,例如:

    ReportViewer rv = new ReportViewer();
    rv.ProcessingMode = ProcessingMode.Remote;
    rv.ServerReport.ReportServerUrl = new Uri(@" http://localhost/reportserver ");
    rv.ServerReport.ReportPath = @"/Reports/MyHandyReport";
    rv.ServerReport.HistoryId = historyId;
    //...snip
    byte[] bytes = rv.ServerReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamids, out warnings);

注意:您也可以将第二个 WCF Web 服务 (ReportExecution2005.asmx?wsdl) 用于报告执行

于 2009-04-28T06:30:05.147 回答
1

那么它有肥皂和可扩展性API,也许它们可以使用?

于 2009-04-28T00:52:01.790 回答