Share via


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 工作階段內儲存連接資訊時,此介面可提供報表伺服器連接資訊。如果應用程式中使用的所有報表都會在相同的報表伺服器上處理,則使用 ReportViewerServerConnection 索引鍵在 Web.config 檔案中指定連接資訊一次,要比在工作階段中的每一個 ServerReport 物件上儲存 ReportServerUrlTimeOut 屬性更有效率。

ReportViewerTemporaryStorage

此索引鍵會指定用來實作 ITemporaryStorage 介面的類別。此介面是用來儲存報表伺服器所傳送的暫存資料流,而不是將其保留在記憶體中,藉此來改善應用程式的延展性。

ReportViewerMessages

此索引鍵會指定用來實作 IReportViewerMessages 介面的類別。此介面是用來提供自訂的使用者介面訊息。

指定完整的類別

每一個索引鍵的值是用來實作介面及包含它之組件位置的類別。在 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

如果您實作 IReportServerConnectionIReportServerConnection2 介面來提供報表伺服器連接資訊,您就必須在 Web.config 檔案中定義 ReportViewerServerConnection 索引鍵。此索引鍵會指定用來實作 IReportServerConnection 及包含它之組件或來源檔案位置的自訂類別。

如果您在 ReportViewerServerConnection 索引鍵中提供此類別,請勿在可能與它衝突的 ServerReport 物件上設定其他屬性。明確地說,就是不要設定 ServerReport.TimeoutServerReport.ReportServerUrlServerReport.ReportServerCredentialsServerReport.CookiesServerReport.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> 模式:CustomSQLServerStateServer

<machineKey>

如果您正在 Web 伺服陣列或叢集中部署 ReportViewer 控制項,您必須指定 <machineKey> 元素,以強制此伺服陣列中的所有節點都使用相同的處理序識別,藉此確保從一部電腦儲存的檢視狀態可以讓任何電腦來讀取。

Note附註

設定 <machineKey> 元素來同步處理 Web 伺服陣列中的檢視狀態,是 Microsoft .NET Framework 2.0 文件集所提供的最佳建議作法。如需有關設定 Web 服務網路之檢視狀態驗證的詳細資訊,請參閱machineKey 項目 (ASP.NET 設定結構描述)

在 .NET Framework 2.0 中,依預設會啟用檢視狀態驗證,並使用 ASP.NET 處理序識別資訊來執行驗證。在每個節點的處理序識別各不相同的叢集或 Web 伺服陣列狀況中,依處理序識別來進行的驗證無法運作。若要強制所有節點使用相同的處理序識別,您可以產生一個驗證索引鍵來支援檢視狀態驗證,以及手動設定每個節點來使用它。

  1. 產生驗證金鑰。您可以利用 .NET Framework 所提供的自動產生功能,也可以透過其他方式來建立索引鍵。當設定 validationKey 屬性時,請勿使用 AutoGenerate 選項。

  2. 產生解密金鑰。對於解密金鑰,您可以建立明確的值,或將 decryptionKey 設為 AutoGenerate。

  3. 開啟 Web 伺服陣列中每個節點的 Web.config 檔,設定 machineKey 元素。您必須指定驗證金鑰、解密金鑰,以及用來驗證資料的加密類型。

  4. 針對 Web 伺服陣列或叢集部署中的每個節點來重複這些步驟。

<httHandlers>

ReportViewer Web 伺服器控制項包括用來顯示報表中所內嵌或參考的影像、用來將報表匯出成不同的輸出格式、提供用來選取報表參數日期的日曆控制項以及讓報表工作階段維持開啟的 HTTP 處理常式。

HTTP 處理常式的組態設定會指定於應用程式 Web.config 檔的 httpHandlers 元素中。當您將 ReportViewer Web 伺服器控制項從工具箱拖曳到網頁上時,組態設定會自動輸入到 Web.config 檔案中。

您無法移除或修改 HTTP 處理常式組態設定。如果您要修改或刪除 Web.config 中的 <httpHandlers> 設定,ReportViewer Web 伺服器控制項會在您檢視 .aspx 網頁時擲回下列錯誤:「ReportViewer Web 控制項 HTTP 處理常式尚未在應用程式的 Web.config 檔中註冊」。此錯誤訊息包含 HTTP 處理常式所需的組態資訊;您可以將這些設定 verbatim 複製到 Web.config 檔案中。此字串將會類似於以下範例 (請注意版本資訊和 PublicKeyToken 將會不同):

<httpHandlers>
   <add path="Reserved.ReportViewerWebControl.axd" verb="*" 
   type="Microsoft.Reporting.WebForms.HttpHandler, 
   Microsoft.ReportViewer.WebForms, Version=8.0.0.0, 
   Culture=neutral, PublicKeyToken=0000000000000000" validate="false" 
   />
</httpHandlers>

HTTP 處理常式是此控制項的一部分,無法使用您提供的自訂功能來移除或取代它。

另請參閱

概念

加入和設定 ReportViewer 控制項
部署報表和 ReportViewer 控制項