內容控制碼

有時候,分散式應用程式需要伺服器程式在用戶端呼叫之間維護狀態資訊。 一次服務多個用戶端的伺服器程式必須保留每個用戶端的狀態資訊。 由於用戶端和伺服器在不同的電腦上使用不同的位址空間,而且它們不一定彼此信任,因此資料共用的常見方法通常無法運作。 例如,用戶端和伺服器無法在全域變數中維護其遠端會話的狀態資訊,因為它們不會共用相同的全域位址空間。 因為資訊在不同的電腦上執行,所以很難將資訊保留在共用檔案中。 簡單方法可能是將所有狀態寄送給用戶端,並在下一次呼叫時將它傳回,但此方法有缺陷:伺服器不一定信任用戶端傳回正確的狀態,而且狀態可能會隱含地系結至伺服器上的某些其他狀態,例如檔案控制代碼或開啟的通訊端。

Microsoft RPC 提供功能強大的安全機制,稱為內容控制碼,可保留與伺服器上指定用戶端相關聯的狀態。 狀態資訊稱為伺服器的內容。 用戶端可以取得內容控制碼,以識別其個別 RPC 會話的伺服器內容。

例如,分散式應用程式中的每個用戶端都可以讓伺服器程式為其 RPC 會話建立及更新資料檔案。 伺服器可以使用每個用戶端資料檔案的檔案控制碼作為內容控制碼。 每次用戶端要求伺服器為其建立之資料檔案上的作業時,用戶端都會將內容控制碼傳遞給伺服器。 用戶端實際上不會取得檔案控制碼本身;它會取得不透明權杖,伺服器 RPC 執行時間可以唯一與檔案控制代碼產生關聯。 因為內容控制碼實際上是檔案控制代碼,所以內容控制碼只有在伺服器的位址空間中才有意義。 不過,用戶端程式可以使用內容控制碼來告訴伺服器要執行更新的檔案。

其他資料也可以是內容控制碼。 例如,用戶端和伺服器可以使用資料庫記錄的記錄號碼做為檔案控制碼。 如果用戶端需要在特定記錄上執行一些更新,它可以取得記錄號碼做為內容控制碼。 每次叫用遠端程式來更新資料庫記錄時,它會將記錄號碼傳遞至伺服器。

通常,內容控制碼會指向伺服器上的記憶體區塊,其中伺服器會保留各種管理資訊。

本節提供定義和使用內容控制碼的相關資訊。 討論會以下列主題呈現: