ReportViewer 的 Web.config 設定
如果您正在使用 ReportViewer Web 伺服器控制項,您可以設定 ASP.NET Web.config 應用程式設定,以便在執行階段設定 ReportViewer。本主題描述用於連接遠端報表伺服器、儲存暫存資料流及提供自訂字串給控制項使用者介面的 Web.config 應用程式設定。本主題也會提供如何針對在 Web 伺服陣列部署中執行的 ReportViewer 應用程式使用 <sessionState> 和 <machineKey> 設定的建議,也將說明 <httpHandlers> Web.config 區段要如何定義 ReportViewer Web 伺服器控制項所使用的 HTTP 處理常式設定。
為 ReportViewer 控制項設定 <appSettings> 元素
若要針對 ReportViewer Web 伺服器控制項設定自訂應用程式設定,您可以將下列索引鍵加入應用程式 Web.config 檔案的 <appSettings> 區段中。這些索引鍵的值是可實作特定介面的完整類別名稱。
索引鍵 |
使用者 |
ReportViewerServerConnection |
此索引鍵會指定用來實作 IReportServerConnection 介面的類別。當工作階段狀態關閉或是您不想要在 ASP.NET 工作階段內儲存連接資訊時,此介面可提供報表伺服器連接資訊。 您也可以指定實作 IReportServerConnection2 介面的類別,以便指定 Cookie 和自訂標頭。 |
ReportViewerTemporaryStorage |
此索引鍵會指定用來實作 ITemporaryStorage 介面的類別。此介面是用來儲存報表伺服器所傳送的暫存資料流,而不是將其保留在記憶體中,藉此來改善應用程式的延展性。 |
ReportViewerMessages |
此索引鍵會指定用來實作 IReportViewerMessages 介面的類別。此介面是用來提供自訂的使用者介面訊息。 在 Visual Studio 2010 和更新版本中,已對 ReportViewer 控制項加入新介面 [T:Microsoft.Reporting.WebForms.]IReportViewerMessages3。若要使用 ReportViewer 控制項所提供的所有使用者介面訊息,請在此指定實作 IReportViewerMessages3 介面的類別。 |
指定完整限定類別
每一個索引鍵的值是用來實作介面的類別以及包含此類別之組件的位置。在 ASP.NET 中,有幾個方法可以利用以下語法來指定此類別:
<add key="MyKeyName" value="MyNamespace.MyClass, Location" />
如果此類別是在組件中實作,則位置可以是應用程式的 bin 資料夾或全域組件快取 (GAC)。在此情況下,必須將索引鍵值指定為包含版本、文化特性和公開金鑰 Token 值的完整組件名稱。另外,如果此類別是在應用程式 APP_CODE 資料夾內的原始程式碼檔案中實作,該資料夾就是您應該指定的位置。
下列範例是在 GAC、應用程式 bin 資料夾或 APP_CODE 資料夾中指定完整類別的有效方法:
<add key="ReportViewerServerConnection" value="MyNamespace.MyClass, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 00000000000000000 "/>
-- 或 --
<add key="ReportViewerServerConnection" value="MyNamespace.MyClass, MyAssembly"/>
-- 或 --
<add key="ReportViewerServerConnection" value=" MyNamespace.MyClass, APP_CODE"/>
ReportViewerServerConnection
如果您實作 IReportServerConnection 或 IReportServerConnection2 介面來提供報表伺服器連接資訊,您就必須在 Web.config 檔案中定義 ReportViewerServerConnection 索引鍵。此索引鍵會指定用來實作 IReportServerConnection 及包含它之組件或來源檔案位置的自訂類別。
如果您在 ReportViewerServerConnection 索引鍵中提供此類別,請勿在可能與它衝突的 ServerReport 物件上設定其他屬性。明確地說,就是不要設定 ServerReport.Timeout、ServerReport.ReportServerUrl、ServerReport.ReportServerCredentials、ServerReport.Cookies 或 ServerReport.Headers 屬性。
下列範例說明 ReportViewerServerConnection 索引鍵的語法。它會指定在組件中實作 IReportServerConnection2 的類別 (該組件名稱為 MyAssembly,而且位於應用程式 Bin 資料夾中):
<appSettings>
<add key="ReportViewerServerConnection" value="MyNamespace.MyRVServerConnectionClass, MyAssembly"/>
</appSettings>
若要檢視用來實作 IReportServerConnection 之類別的程式碼範例,請參閱為 ReportViewer Web 伺服器控制項指定連接和認證。
ReportViewerTemporaryStorage
您必須設定 ReportViewerTemporaryStorage 索引鍵,才能指定用來實作 ITemporaryStorage 介面的物件。如果您想要儲存報表伺服器所傳送的暫存資料流,而不是將其保留在記憶體中,請實作此介面。因為在可以開始新的要求之前,必須完成每一個要求,所以在任何給定的時間都只會儲存目前的頁面。這項設定只供伺服器報表使用。下列範例說明 ReportViewerTemporaryStorage 索引鍵的語法:
<appSettings>
<add key="ReportViewerTemporaryStorage" value="MyNamespace.MyTemporaryStorageClass, MyAssembly" />
</appSettings>
ReportViewerMessages
您必須設定 ReportViewerMessages 索引鍵,才能指定用來實作 IReportViewerMessages (它是提供自訂字串給 ReportViewer 控制項的介面) 的物件。您可以使用這個介面,針對預設未提供的語言來支援字串當地語系化。下列範例說明 ReportViewerMessages 索引鍵的語法。
<appSettings>
<add key="ReportViewerMessages" value="MyNamespace.MyRVMessageClass, MyAssembly" />
</appSettings>
為 ReportViewer 控制項設定 <system.web> 元素
在應用程式的 Web.config 檔案中,您可以在 <system.web> 區段中定義設定,以決定執行階段的報表工作階段行為。ReportViewer 控制項也會使用這個區段來註冊此控制項提供的 HTTP 處理常式設定。使用下列元素:<sessionState>、<machineKey> 和 <httpHandler>。
<sessionState>
您可以使用 sessionState 元素來決定工作階段狀態是要儲存在處理序中、關閉,還是由跨處理序 ASP.NET 狀態服務所處理。
InProc 是預設值,如果您的應用程式執行於單一電腦,您便可以使用它。如果您的報表在執行於 Web 伺服陣列中的應用程式內執行,請勿使用此設定。
如果 ReportViewer 控制項正在本機模式中處理用戶端報表定義 (.rdlc) 檔案,則不能使用 Off。本機模式需要工作階段狀態。如果您在使用遠端模式,您可以關閉工作階段狀態。如果您停用工作階段狀態,請務必在 <appSetting> 元素中指定 ReportViewerServerConnection。
您也可以使用其他 <sessionState> 模式:Custom、SQLServer 和 StateServer。
<machineKey>
如果您正在 Web 伺服陣列或叢集中部署 ReportViewer 控制項,您必須指定 <machineKey> 元素,以強制此伺服陣列中的所有節點都使用相同的處理序識別,藉此確保從一部電腦儲存的檢視狀態可以讓任何電腦來讀取。
注意事項 |
---|
設定 <machineKey> 項目來同步處理 Web 伺服陣列中的檢視狀態,是 Microsoft .NET Framework 2.0 (含) 以後版本文件所提供的最佳建議作法。如需有關設定 Web 服務網路之檢視狀態驗證的詳細資訊,請參閱 machineKey 項目 (ASP.NET 設定結構描述)。 |
在 .NET Framework 2.0 (含) 以後版本中,依預設會啟用檢視狀態驗證,並使用 ASP.NET 處理序識別資訊來執行驗證。在每個節點的處理序識別各不相同的叢集或 Web 伺服陣列狀況中,依處理序識別來進行的驗證無法運作。若要強制所有節點使用相同的處理序識別,您可以產生一個驗證索引鍵來支援檢視狀態驗證,以及手動設定每個節點來使用它。
產生驗證金鑰。您可以利用 .NET Framework 所提供的自動產生功能,也可以透過其他方式來建立索引鍵。當設定 validationKey 屬性時,請勿使用 AutoGenerate 選項。
產生解密金鑰。對於解密金鑰,您可以建立明確的值,或將 decryptionKey 設為 AutoGenerate。
開啟 Web 伺服陣列中每個節點的 Web.config 檔,設定 machineKey 元素。您必須指定驗證金鑰、解密金鑰,以及用來驗證資料的加密類型。
針對 Web 伺服陣列或叢集部署中的每個節點來重複這些步驟。
<httHandlers>
ReportViewer Web 伺服器控制項包括可用於下列作業的 HTTP 處理常式:擷取報表中所內嵌或參考的影像、將報表匯出成不同的輸出格式、提供用來選取報表參數日期的日曆控制項、讓報表工作階段維持開啟,以及支援 ReportViewer 控制項中的用戶端指令碼功能。
HTTP 處理常式的組態設定是在 system.web/httpHandlers 項目和 system.webServer/handlers 項目中指定。應用程式 Web.config 檔。指定於 system.web/httpHandler 的處理常式可供傳統模式的 Internet Information Services (IIS) 6.0 或 IIS 7.0 使用,而指定於 system.webServer/handlers 的處理常式可供整合模式的 IIS 7.0 使用。當您將 ReportViewer Web 伺服器控制項從工具箱拖曳到 Web Form 上時,組態設定會自動輸入到 Web.config 檔案中。HTTP 處理常式是此控制項的一部分,無法移除或取代它。
重要
若要使用以整合模式執行的 IIS 7.0,您必須移除 system.web/httpHandlers 中的 HTTP 處理常式。否則 IIS 不會執行應用程式,而會顯示錯誤訊息。
您必須將適用於 IIS 版本的 HTTP 處理常式保留在其個別區段中。如果您移除或修改 HTTP 處理常式組態設定,Web Form 中的 ReportViewer Web 伺服器控制項會顯示錯誤訊息,告知您將它加回至 web.config 檔案的個別區段中。system.web/httpHandlers 和 system.webServer/handlers 中的 HTTP 處理常式複製如下:
<system.web>
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*"
type="Microsoft.Reporting.WebForms.HttpHandler,
Microsoft.ReportViewer.WebForms, Version=10.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"
/>
</httpHandlers>
</system.web>
<system.webServer>
<handlers>
<add name="ReportViewerWebControlHandler"
preCondition="integratedMode"
verb="*" path="Reserved.ReportViewerWebControl.axd"
type="Microsoft.Reporting.WebForms.HttpHandler,
Microsoft.ReportViewer.WebForms, Version=10.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</handlers>
</system.webServer>
請參閱
參考
httpHandlers 項目 (ASP.NET 設定結構描述)