識別執行狀態
超文本傳輸通訊協定 (HTTP) 是無連線和無狀態通訊協定。 無連線和無狀態表示它不會自動指出不同的要求是否來自相同的用戶端,或甚至單一瀏覽器實例是否仍在主動檢視頁面或網站。 工作階段會建立邏輯連接以透過 HTTP 維護伺服器與用戶端之間的狀態。 與特定工作階段相關的使用者特定資訊又稱為工作階段狀態。
工作階段管理需要將 HTTP 要求與從相同工作階段產生的其他舊要求相互關聯。 若沒有工作階段管理,由於 HTTP 通訊協定的無連接與無狀態的本質,這些要求會顯得與報表伺服器 Web 服務不相關。
Reporting Services 不會公開會話狀態的整體概念,例如 ASP.NET 公開的概念。 不過,當執行報表時,報表伺服器會以執行的形式在方法呼叫之間維護狀態。 執行可讓使用者以數種方式和報表互動,包括從報表伺服器載入報表、設定報表的認證與參數,以及轉譯報表。
在與報表伺服器通訊時,用戶端會使用執行來管理報表檢視和使用者流覽至報表中的其他頁面,以及顯示或隱藏報表的區段。 用戶端應用程式正在執行的每個報表,會有唯一的執行。
一般而言,當使用者導覽至瀏覽器或是用戶端應用程式,並選取要檢視的報表時,執行的存留期間會開始。 在收到執行的最後一個要求之後,會在短暫逾時期間後捨棄執行(預設逾時為 20 分鐘)。
從 Web 服務觀點來看,當呼叫報表伺服器 Web 服務 LoadReport, LoadReportDefinition 或是 Render 方法時,存留期間即開始。 應用程式可以使用其他方法來操作使用中執行 (例如,設定參數和設定資料來源)。 在收到執行的最後一個要求之後,會在短暫逾時期間後捨棄執行(預設逾時為 20 分鐘)。
應用程式會藉由儲存 ExecutionID,在呼叫 Web 服務和RenderRenderStream方法之間追蹤多個作用中的執行。 執行標識碼會從 LoadReport 和 LoadReportDefinition 方法傳回SOAP標頭中。
下圖顯示報表的處理和轉譯路徑。
為了支援稍早所述的函式,目前的SOAP Render方法會分割成多個方法,包括執行初始化、處理和轉譯階段。
若要以程式設計的方式轉譯報表,您必須:
使用 LoadReport or LoadReportDefinition 來載入報表或是報表定義。
查看報表是否需要認證或是參數,方法是檢查由 CredentialsRequired 或 ParametersRequired 傳回的 ExecutionInfo 物件之 LoadReport 與 LoadReportDefinition 屬性。
若有需要,請使用 SetExecutionCredentials 與 SetExecutionParameters 方法來設定認證和/或參數。
呼叫 Render 方法以轉譯報表。
當報表是在工作階段中時,儲存在報表伺服器資料庫中的基礎報表有可能會變更。 例如,報表定義有可能會變更,報表有可能會刪除或是移動,而且使用者權限也可能會變更。 如果報表在作用中會話中,則基礎報表的變更(也就是儲存在報表伺服器資料庫中的報表)不會影響它。
您也可以使用 URL 存取命令來管理報表工作階段。