為 ReportViewer Web 伺服器控制項指定連接和認證
若要指定從 ReportViewer 控制項到報表伺服器的連接,知道在哪些條件下進行連接會很有幫助。
在啟動時,當載入包含 ReportViewer 控制項的網頁時,此控制項會連接到報表伺服器來建立報表工作階段、取得或設定報表參數屬性,以及擷取伺服器上可用之轉譯延伸模組的清單。
如果此控制項執行時的設定為 AsyncRendering=true,則在轉譯頁面之後,IFrame 物件會非同步擷取報表的 HTML。
如果報表參考外部影像,ReportViewer 控制項會使用 ReportViewer HTTP 處理常式透過個別要求擷取影像,此時每一個要求都會在自己的連接下進行。
在轉譯報表之後,如果您將轉譯的報表匯出成不同格式,可能會發生其他連接。匯出要求會從瀏覽器傳送到報表伺服器 (使用個別的連接)。
所有這些作業的成功與否取決於 ReportViewer 控制項是否具有與報表伺服器的有效連接資訊。您要如何指定連接資訊會因為類似以下的因素而異:您是否使用表單驗證、Windows 驗證、目前使用者的認證或 ASP.NET 工作階段。
如何指定連接
若要連接到伺服器,您可以在 ServerReport 物件上設定屬性,或是實作用來設定連接的介面,然後在 Web.config 檔案中指定實作。ReportViewer 控制項一定會先讀取 Web.config 檔案,並使用連接值 (如果有指定的話)。
如果啟用了工作階段狀態,您可以選擇是否要在 ServerReport 物件上設定屬性,或是在 Web.config 檔案中指定連接資訊。如果您在 Web.config 中指定連接資訊,請勿在 ServerReport 物件上設定屬性。
如果工作階段狀態已關閉,您必須實作 IReportServerConnection 或 IReportServerConnection2,並在 Web.config 檔案中指定實作。
附註 |
---|
進行連接所使用的使用者帳戶必須在報表伺服器上具有有效的角色指派。系統和項目層級的角色指派都會用來建立一組完整的權限。如果您不熟悉報表伺服器角色指派,可以遵循教學課程來學習角色指派的基礎觀念。如需詳細資訊,請參閱 MSDN 上的教學課程:設定 Reporting Services 中的權限。 |
設定 ServerReport 物件上的屬性
當您在設計階段將控制項拖曳到 Web Form 上時,您可以在 ServerReport 物件上設定報表伺服器 URL 及逾時屬性。
根據預設,ReportViewer Web 伺服器控制項會以 ASP.NET 執行緒使用者的身分連接到報表伺服器。
若要以不同使用者的身分連接 (例如,如果您希望所有使用者都使用單一使用者帳戶連接到報表伺服器),請在可序列化的物件上實作 IReportServerCredentials,並將該物件的執行個體傳遞給 ReportViewer.ServerReport.ReportServerCredentials。由於當 ASP.NET 網頁處理完成之後,ReportViewer 控制項可以連接到報表伺服器,所以如果從處理序儲存 ASP.NET 工作階段 (例如,在 SQL Server 資料庫中),必須可以將物件序列化來加以儲存。
請注意,直接設定 ReportViewer.ServerReport.ReportServerCredentials 屬性有兩個缺點:
必須啟用 ASP.NET 工作階段。
ASP.NET 工作階段可能會變得太大,這是不必要的,因為 ReportViewer 控制項會在每一個使用者檢視頁面的工作階段中放置物件的執行個體。
您可以在 Web.config 檔案中指定 IReportServerConnection2 的實作,以避免這些缺失。
如需工作階段狀態關閉時如何指定認證的相關建議,請參閱本主題的「在 ASP.NET 工作階段關閉時儲存認證的指導方針」。
在 Web.config 中指定報表伺服器連接
在實作 IReportServerConnection 或 IReportServerConnection2 時,您必須在應用程式 Web.config 檔案中指定您的實作。Web.config 檔案會提供包含連接和認證資訊的物件類型。
附註 |
---|
您必須在 Web.config 檔案中指定 IReportServerConnection2 或 IReportServerConnection 的實作,而不能指定 IReportServerCredentials。IReportServerConnection2 衍生自 IReportServerCredentials,而且會加入其他屬性來指定報表伺服器 URL、逾時值,以及任何您想要使用的自訂 Cookie 或 HTTP 標頭。 |
雖然在 ASP.NET 工作階段關閉時需要 IReportServerConnection2,但是如果您想要避免在工作階段中儲存物件,當您使用它時可以開啟 ASP.NET 工作階段。如需詳細資訊和程式碼範例,請參閱 IReportServerConnection2 的程式設計參考主題。如需有關如何在 Web.config 中加入索引鍵的詳細資訊,請參閱ReportViewer 的 Web.config 設定。
下表摘要列出提供認證和連接資訊的介面。
介面 | 描述 |
---|---|
IReportServerCredentials |
如果您不想要以目前使用者的身分連接,您可以使用此介面來指定 ServerReport 物件用來連接報表伺服器的認證。 根據預設,ReportViewer 控制項會以 ASP.NET 執行緒使用者的身分連接到報表伺服器。 您可以指定不同的使用者,其方式是將 ReportViewer.ServerReport.ReportServerCredentials 設定為您自己的 IReportServerCredentials 實作。 |
IReportServerConnection |
此介面繼承自 IReportServerCredentials,而且會提供其他成員來指定報表伺服器 URL 和逾時屬性。 |
IReportServerConnection2 |
此介面繼承自 IReportServerConnection,而且會提供其他成員來指定自訂 Cookie 或標頭,這在您搭配報表伺服器使用單一登入產品時會很有幫助。 |
在 ASP.NET 工作階段關閉時儲存認證的指導方針
在實作 IReportServerConnection2 時,請勿將使用者認證儲存在此類別中。如果您在可序列化的物件中儲存認證,則使用者名稱和密碼將會序列化為 ASP.NET 工作階段,並儲存在 SQL Server 資料庫或另一個狀態伺服器中。雖然序列化認證不一定會有安全上的風險,但是確實會因為將認證儲存為工作階段資料而增加攻擊的介面區。
下列方法是如何避免將認證連同其他工作階段資料一起儲存的範例:
從組態檔或某個其他組態存放區讀取預存認證。如需詳細資訊和程式碼範例,請參閱 IReportServerCredentials 的程式設計參考主題。
從 ASP.NET 要求讀取 HTTP Cookie,以提供因用戶端而異的認證。
附註 |
---|
雖然在選擇如何將認證儲存於類別外面時有一些彈性,但是您必須確定相同報表工作階段中的後續要求會傳回相同的認證。 |
另請參閱
參考
IReportServerCredentials
IReportServerConnection2
概念
ReportViewer 的 Web.config 設定
為非同步轉譯設定 ReportViewer
伺服器報表的部署考量
設定 ReportViewer 的遠端處理
加入和設定 ReportViewer 控制項