通常必須在不同的 RPC 呼叫之間維護伺服器上的狀態,使用內容句柄是執行此動作的最佳方式。 一些關於上下文句柄如何在內部運作的話,能幫助我們了解何時上下文句柄最為有效。
用戶端永遠不會在伺服器上收到保留的狀態。 伺服器的狀態通常是記憶體區塊的指標,而客戶端沒有相關信息。 用戶端接收的是一個與其他資訊相關聯的龐大唯一數字,這是伺服器傳送至用戶端的,並在所有後續操作中作為上下文控制代碼。 每當客戶端引用已開啟的句柄時,它會傳送從伺服器接收到的大數字,即在開啟該上下文句柄時獲得的數字。
伺服器會追蹤它傳送給用戶端的所有大型數位。 當伺服器收到代表上下文句柄的一個大數字時,它會在該用戶端的有效且未結束的上下文句柄集合中查找該數字,並找到伺服器端對應的上下文。 這會傳遞至伺服器例程。 如果找不到大數字,則會引發RPC_X_SS_CONTEXT_MISMATCH例外狀況並傳播至客戶端。
此設計的結果如下:
- 上下文控制代碼只有在既有的用戶端/伺服器連線中才有效。 它無法傳遞至另一個用戶端。
- 如果伺服器重新啟動,或遺失與客戶端的連線,內容句柄會變成無效。
- 用戶端無法解譯內容句柄在伺服器上代表的內容。 對於客戶端而言,所有上下文控制碼都只是大數字。
如果客戶端失敗,伺服器會收到通知,並使用執行機制清除其內容句柄。