剖析SQL Server 2005中的报告服务架构
一、 简介
SSRS是一个综合性的可扩展报告平台,它包括一组集成的处理组件、编程接口和工具。处理组件是SSRS多层架构的基础,并且能够彼此交互以检索数据、处理布局、生成和把一个报告提交到一个目标。SSRS支持两种类型的组件:
· 处理器-确保SSRS的一致性,并提供一个基础结构供开发人员添加新的功能(扩展)。在当前的SSRS发行版本中,处理器本身是不可扩展的。
· 扩展-由处理器调用的程序集,执行特定的处理功能,例如数据检索。开发人员能够编写定制扩展。
图1描述了报告服务架构图;本文后面将更详细地描述这些组件。该图中的箭头显示在SSRS的内部和外部的各组件(外部工具,应用程序,服务和工具)之间的数据流。
图1.SQL Server报告服务架构。
二、 ReportServer Web和Windows服务
Report Server被实现为web服务和Windows服务的"共同体"。这些服务共同工作以宿主、处理和提交报告。
当SSRS Windows服务启动时,它开始加载基本支持程序集(例如一个SQL数据提供者和接口库),但是它不加载扩展。在这个版本中,SSRS Windows服务处理加密和解密,用作调度和提交处理器的一个宿主。调度和提交处理器使用一个PollingInterval配置来监视"事件"(例如定时订阅)的SSRS目录和事件表格。事件指示SSRS"醒来"并开始处理。
类似于任何.NET web服务,SSRS web服务经由IIS激活("唤醒")并且在ASP.NET工作进程(aspnet_wp.exe)中执行。可编程接口使"唤醒"事件更容易。
三、 可编程接口
报告服务可编程接口接收SOAP(经由SSRS web服务)和HTTP请求(经由URL存取)。
SSRS 2005 web服务提供三种端点:
· 的提供是为实现与SSRS2000的向后兼容性。
· <server>/ReportServer/ReportService2005.asmx是SSRS 2005中新的管理端点。
· <server>/ReportServer/ReportExecution2005.asmx是新的执行端点。
一个端点名描述了相应的使用目的。例如,执行端点的设计是为了提供报告执行(处理)接口,并且相应地提供对函数(例如Render)的存取功能。Render函数把生成的报告以一个指定格式(例如HTML)的流形式返回。
可编程接口便利了从SSRS目录中实现信息检索和在SSRS组件之间的信息交换。
当请求一个报告时(或者通过交互方式或者通过调度和提交处理器),可编程接口初始化该报告处理器组件并开始处理一个报告。
四、 Report Processor(报告处理器)
报告处理器把一个Report Server的所有组件绑定到一起,并且负责在SSRS内部的缓冲。缓冲是指,当一个用户打开该报告时,SSRS能够保持处理过的报告的一个副本并且返回该副本。缓冲能够缩短检索一个报告要求的时间,特别如果该报告很大或经常被存取的情况下。所有的报告缓存存储在SSRS目录(具体地说,是存储在ReportServerTempDB数据库)下,并且能够在SQL Server和Report Server重启时仍然存在。
报告处理器执行下列操作:
· 执行-检索一个报告定义,并且通过数据处理扩展把它与检索的数据相结合。该操作生成一个中间格式。
· 生成-使用生成扩展把中间格式生成为一个请求的输出格式。
· 模型处理-这类似Report Builder生成的报告的执行操作,其中包含一个语义模型(或一个简单的模型,它用作一个报告的一个数据源)和一个语义查询。语义查询是指针对一个模型的一个查询;就象一个SQL查询一样,它生成一个报告的数据集。
下面是报告处理器响应用户请求的方式:
· 新的交互式报告请求-中间格式被生成并被传递以便生成扩展;用户接收生成的报告。
· 请求生成缓存或快照-中间格式被生成并被存储在数据库中。
· 请求缓冲的报告或快照-中间格式被从缓存(或快照)中检索并被传递以便生成扩展;用户接收生成的报告。
五、 命令行工具
在安装报告服务期间,自动地安装三个管理助理工具:
· rs.exe-宿主脚本操作。例如,开发人员能够创建VB.NET脚本以发布一个组报告。
· rsconfig.exe-用于修改到Report Server数据库的加密的连接信息。
· rskeymgmt.exe-备份/恢复加密数据的对称密钥,该数据为一个Report Server所用;或如果该密钥被丢失的话,删除加密的数据。
注意 SSRS 2005已经放弃了rsactivate.exe工具,这个工具在以前的版本中用于在web场所下激活新的SSRS实例。在SSRS 2005中,激活是使用报告服务配置工具实现的。
六、 报告服务扩展
一个扩展是一个.NET程序集,为报告处理器所调用以执行某种处理功能。存在若干类型的扩展:数据处理,提交,生成,安全(认证和授权),SemanticQuery,ModelGeneration和EventProcessing,等等。
对于一个被Report Server使用的扩展来说,必须把它安装到(假定是默认的SSRS配置)"C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin"目录下,并且在"C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\rsreportserver.config"下进行配置。
一个扩展文件名的最后一部分通常暗示了该扩展的功能。例如,HTML生成扩展的文件名是"Microsoft.ReportingServices.HtmlRendering.dll"。
定制扩展允许开发人员添加在SSRS中不能用的补充功能。例如,一个公司能够实现一个把报告提交到一个电话或一个传真的扩展。
注意 该版本的SSRS不允许定制SemanticQuery,ModelGeneration或EventProcessing扩展。
七、 数据处理扩展
数据处理扩展负责从报告数据源检索数据。详细说来,这些任务包括打开到一个数据源的连接,分析查询并返回字段名,传递参数,以及检索和遍历数据集等。表格1概括了包括在SSRS中以及可以用之配置的数据处理扩展。
表格1.能够使用SSRS进行配置的数据处理扩展
扩展描述/注意事项
SQL Server连接到并且从SQL Server数据库引擎(从7.0到2005版本)中检索数据。
OLE DB连接到并且从OLE DB兼容的数据源中检索数据。
Microsoft SQL Server Analysis连接到并且从SQL Server分析服务2000和2005中检索数据。对于分析服务2005来说,这个扩展支持Multidimensional Expressions(MDX)和Data Mining Expressions(DMX)。对于分析服务2000来说,这个扩展仅支持非参数化MDX。
Oracle 连接到并且从一个Oracle数据库中检索数据;这时,要求在一台安装有Reporting Server的计算机上安装Oracle客户端8i Release 3(8.1.7)。
ODBC连接到并且从ODBC兼容的数据源中检索数据。
XML从能够通过URL存取的任何XMLweb源(例如一个web服务器)中检索XML数据。
所有的扩展(它们都(除了XML)使用SSRS进行安装)都利用了相应的.NET数据提供者。Microsoft.ReportingServices.DataExtensions库提供包装类,这些类负责提供到.NET数据提供者的SSRS数据处理扩展接口。
开发人员可以创建其它定制数据处理扩展。
八、 提交扩展
提交扩展负责把报告提交到特定的设备或格式。在RS中的扩展包括电子邮件和文件共享提交。当用户(或管理员)创建一个订阅时,选择提交方法及相应的扩展。
表格2概括了这些(包括在SSRS中的和使用SSRS进行配置的)提交扩展。
表格2.SSRS包括的提交扩展
扩展 目的
邮件提交把一个生成的报告提交到一个邮件收件箱。允许设置提交选项-控制输出格式以及是否该报告被提交为一个链接或作为一个附件。
文件共享提交把一个生成的报告提交到一个共享文件夹。允许设置提交选项-控制一个目的地文件夹路径,一个输出格式以及是否该报告能够覆盖一个更旧版本或被添加为一个新的版本。
开发人员可以创建其它定制提交扩展。
九、 生成扩展
Report Server生成扩展负责把一个报告的设计和数据转换成一种设备特定的格式。RS中包括的扩展包括HTML(3.2和4.0),Microsoft Excel,Text/CSV,XML,图像(BMP,EMF,GIF,JPEG,PNG,TIFF,WMF),以及PDF生成。
注意 不象 SSRS 2000,它把Excel文件生成为一个含有特定Excel元标记的MHTML文件,SSRS 2005把报告生成为Excel的本机二进制格式。
因为最后的生成阶段仅是与数据处理松耦合的,它能够使用户为同一个报告选择不同的生成选项而不需要重新查询数据源。
另外,开发人员还能够创建其它定制生成扩展。
十、 安全扩展
本文经常使用术语"安全扩展",好象它是一个概念。事实上,存在两种相互联系的扩展:
· 认证扩展,负责建立用户标识
· 授权扩展,负责检查是否一个标识能够存取一个特定SSRS资源
SSRS包括一个基于Windows认证的安全扩展。在建立一个用户标识后,一个授权过程决定是否配置一个Windows用户(或包含一个用户的一个Windows组)以存取一个报告服务器上的一个特别资源。
开发人员能够创建其它定制安全扩展。一个SSRS实例仅能使用一个安全扩展。也就是说,或者使用Windows或者使用一个定制扩展,同一时刻只能使用一个。
十一、 Report Server数据库
SSRS目录下包括两个数据库:Report Server数据库(默认名是ReportServer)和ReportServer临时数据库(默认名是ReportServerTempDB)。Report Server数据库是一个SQL Server数据库,它能够存储SSRS配置部分,报告定义,报告元数据,报告历史,缓存政策,快照,资源,安全设置,加密的数据,调度和提交数据,以及扩展信息。
注意 尽管用户能够直接存取在SSRS目录下的数据库并且能够直接修改SSRS使用的对象;但在实践中,不推荐(或不支持)这样做,因为在SSRS目录下的内在数据和结构不能被保证与不同版本的SSRS、服务包或补丁相兼容。
请把Report Server数据库当作产品数据库之一来对待。尽管许多开发人员都习惯把RDL存储在一个单独的仓库中,并因此导致经常恢复RDL;但是,损失快照数据能够带来消极的业务影响。例如,用户可能使用快照的报告"相对静止"数据的能力来作一些业务决定。
SSRS使用的另一个数据库是Report Server临时数据库。这个数据库负责存储中间处理产品,例如缓冲的报告、会话和执行数据等。
注意 为了把临时快照存储在文件系统而不是数据库中,管理员应该完成下列步骤。
首先,修改RSReportServer.config,并把WebServiceUseFileShareStorage和WindowsServiceUseFileShareStorage设置为True。
然后,把FileShareStorageLocation设置为一个全称路径;默认路径是"C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\RSTempFiles"。
不同于SQL Server的tempdb,当在ReportServerTempDB中的数据存储时限超过SQL Server时,Report Server将会重启。而且,Report Server能够周期性地清除ReportServerTempDB中的到期的和孤立的数据。
在任何时间,所有的ReportServerTempDB中的数据都能够被以最小(或毫无)影响删除掉。例如,这种用户可能体验到的最小的影响是带来一种暂时的性能减弱(由于损失了缓存数据,而且失去了一个执行状态)。执行状态被存储在表SessionData中。执行状态结果的损失可能导致一个错误:"Execution 'j4j3vfblcanzv3qzcqhvml55' cannot be found (rsExecutionNotFound)"。为了解决执行状态损失问题,用户需要重新打开一个报告。
提示 SSRS不能恢复数据库中删除的ReportServerTempDB或表。为了快速地从数据库中对象的错误删除中进行恢复,应该保留一个脚本或一个空ReportServerTempDB的备份。
在一个向外扩展的发布中,SSRS目录是被跨该发布中所有的报告服务器共享的。