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配置的信息,有不熟悉關於他們的配置的朋友或者遇到錯誤無法發布的朋友歡迎在下面留言,我將盡量根據大家所提供的錯誤提示來幫大家解決問題。