內容句柄
有時候,分散式應用程式需要伺服器程式來維護用戶端呼叫之間的狀態資訊。 一次服務多個客戶端的伺服器程序必須保留每個客戶端的狀態資訊。 由於客戶端和伺服器在不同的電腦上使用不同的位址空間,而且它們不一定彼此信任,因此數據共用的常見方法通常無法運作。 例如,客戶端和伺服器無法在全域變數中維護遠端會話的狀態資訊,因為它們不會共用相同的全域地址空間。 很難將資訊保留在共用檔案中,因為它們在不同的計算機上執行。 簡單的方法可能是將所有狀態寄送給用戶端,並在下一次呼叫時讓用戶端傳回它,但此方法有缺陷:伺服器不一定信任用戶端傳回正確的狀態,而且狀態可能會隱含地系結至伺服器上的其他狀態,例如檔句柄或開啟的套接字。
Microsoft RPC 提供功能強大的安全機制,稱為內容句柄,以保留與伺服器上指定客戶端相關聯的狀態。 狀態資訊稱為伺服器的內容。 用戶端可以取得內容句柄,以識別其個別 RPC 工作階段的伺服器內容。
例如,分散式應用程式中的每個用戶端都可以讓伺服器程式為其 RPC 工作階段建立及更新資料檔。 伺服器可以使用其每個客戶端數據檔的檔案句柄做為內容句柄。 每次用戶端要求伺服器為其建立之數據檔上的作業時,用戶端都會將內容句柄傳遞至伺服器。 客戶端實際上不會取得檔句柄本身;它會取得伺服器 RPC 執行時間可以唯一關聯至檔句柄的不透明令牌。 由於內容句柄實際上是檔案句柄,因此內容句柄在伺服器的位址空間中才有意義。 不過,用戶端程式可以使用內容句柄來告訴伺服器要執行更新的檔案。
其他數據也可以是內容句柄。 例如,客戶端和伺服器可以使用資料庫記錄的記錄編號作為檔句柄。 如果用戶端需要在特定記錄上執行一些更新,它可以取得記錄編號做為內容句柄。 它會在每次叫用遠端程式來更新資料庫記錄時,將記錄編號傳遞至伺服器。
內容句柄通常會指向伺服器保留各種管理資訊的伺服器上記憶體區塊。
本節提供定義和使用內容句柄的相關信息。 討論會在下列主題中呈現: