伺服器內容執行例程
如果伺服器代表用戶端維護內容時通訊中斷,可能需要清除例程,才能代表指定的用戶端清除伺服器所維護的狀態。 這個清除例程稱為 內容執行例程。 當連線中斷時,伺服器存根和運行時間連結庫會在客戶端開啟的每個內容句柄上呼叫此例程。
當您將 [context_handle] 屬性套用至類型定義時,需要內容執行例程,而且會以隱含方式宣告和命名。 如果 [context_handle] 屬性直接套用至參數,伺服器將不會呼叫內容執行例程。
內容執行例程語法如下:
void __RPC_USER type-id_rundown (type-id);
請注意,類型名稱會決定內容執行例程的名稱。
接下來的代碼段會顯示範例內容執行例程。 會呼叫在 介面開發中使用內容句柄、使用內容句柄 伺服器開發使用內容句柄,以及使用內容句柄 使用內容句柄進行客戶端開發中所使用的 RemoteClose 程式。 此程式會關閉檔句柄、釋放與檔案相關聯的記憶體,並將 NULL 指派給內容句柄。 指派 NULL 是呼叫 RemoteClose 函式的結果,而且在執行案例中並非必要。 不論內容句柄是否設定為 NULL,RPC 運行時間都會清除其狀態。
//file: cxhndp.c (fragment of file containing remote procedures)
//The rundown routine is associated with the context handle type.
void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown(
PCONTEXT_HANDLE_TYPE phContext)
{
printf("Client died with an open file, closing it..\n");
RemoteClose(&phContext);
assert(phContext == 0);
}