SSRS是一个功能丰富的报表平台,我们可以在这个平台上实现各种不同需求的报表应用,所以这个平台也吸引了很多.net框架之外的技术,希望能在应用中引入SSRS的报表,比如JSP或者PHP页面,这个时候系统往往会有这种需求,就是通过程序能够直接访问到SSRS的报表,而不让其弹出身份验证框。
从SSRS2008之后,匿名访问的配置就没有那么直接,可能会很麻烦,关于这点园子里已经有兄弟Dege301对其描述过:
http://www.cnblogs.com/dege301/archive/2010/04/09/1708103.html
我这里将用另外一个间接的方法对SSRS实现匿名验证。具体的思路就是在应用(JSP or PHP等)和SSRS之间加一个ASP.NET程序,利用ReportViewer显示报表,发布到IIS的时候让其模拟为在SSRS下有访问权限的用户。
为了演示方便,首先建立一个SSRS项目,然后放置几张简单的报表。
之后将其发布,后面将用匿名的方法间接的对这些报表进行访问。
报表的内容用Report1,2,3进行了标识。
打开Visual Studio,新建一个ASP.NET Web Application项目,加入两个页面Report.aspx,ReportList.aspx,前者是用ReportViewer来显示报表的,它接收ReportList.aspx传递过来的报表路径信息。
此外加入了一个SSRS中的系统表在Linq to SQL中。从这个表里可以读到SSRS实例下都已经发布了哪些报表。
从这一步开始到创建ReportList.aspx的所有步骤,都是为了让页面能读取到已经发布到SSRS报表的信息,对于不熟悉ASP.NET的朋友来说可以直接跳过,这个页面就相当于在一个JSP页面中向SSRS发送报表请求的一个页面。
在ReportList.aspx里,加入一个ListView控件以及LinqDataSource控件,我们在这个页面上通过Linq to SQL把SSRS实例中的报表信息都读出来,并且创建超级链接跳转到Report.aspx显示报表的详细内容。
首先配置LinqDataSource,按照我的截图一步一步配置就可以,这个数据源将读取出所有已经发布到SSRS中的报表。首先配置页面中的LinqDataSource。
然后选择需要的字段,这里我们只需要Path字段。点击旁边的Where…按钮。
在Where表达式界面中添加Type==2的条件,Type为2的被标识为一个报表信息,1为一个目录信息。
编辑ListView里的模版列信息,放入HyperLink控件。
点击Edit Binding,配置Text绑定属性。
然后再配置navigateUrl绑定属性。
ReportList.aspx配置完毕,对于不熟悉ASP.NET的朋友来说可以忽略上一个页面的创建,因为这个页面主要是用来模拟一个普通的页面比如JSP或者PHP跳转到Report.aspx页面的。
接下来再来创建Report.aspx页面,放入ScriptManager和ReportViewer控件。这两个控件在工具面板中都很容易找到。
Report.aspx所对应的后台代码。
代码从url参数中读取到Path参数,然后再赋给ReportViewer控件中。
接下来运行下应用,从ReportList.aspx页面开始。
列表读取到了所有已经发布到SSRS实例的报表。点击任意一个链接,就可以查看到报表的内容,留意到这个时候是没有SSRS弹出的验证界面的。
最后,将这个项目发布到IIS中作为其它应用访问SSRS报表的一个中间层。新建IIS站点。
点击身份验证。
开启ASP.NET模拟。
配置模拟信息,这里只要使用一个对报表有访问权限的用户即可。
最后,浏览项目。
可以看到跟本地调试的效果是一样的。这样就可以把这个发布的项目作为中间层来作为其它网页应用访问SSRS报表的一个中间层,来间接的实现匿名访问。
如果你觉得ReportViewer控件的工具栏很别扭,可以选择不让它显示出来,在ReportViewer控件中,找到 ShowToolBar属性设置为False即可。
这样就可以看到一个干净的SSRS报表了。
以上通过间接的方法实现SSRS报表的方法大致介绍完毕,方法的主要思路就是在应用和SSRS之间加入了一个ASP.NET站点,让这个站点具有报表的访问权限从而间接的实现了匿名访问。
这里面涉及到了一些关于ASP.NET和IIS配置的信息,有不熟悉关于他们的配置的朋友或者遇到错误无法发布的朋友欢迎在下面留言,我将尽量根据大家所提供的错误提示来帮大家解决问题。