共用方式為


錯誤處理 (RPC)

在同步 RPC 中,用戶端會進行遠端呼叫,以成功或失敗的程式代碼傳回。 異步 RPC 提供更多機會讓呼叫失敗,而且這些失敗會根據發生的位置和時間而以不同的方式處理。 下表描述呼叫失敗的方式,以及其處理方式。

用戶端清除

失敗徵兆 清理
用戶端在呼叫遠端程式時攔截例外狀況。 不需要 RPC API 呼叫。 已清除所有 RPC 狀態。
用戶端會收到呼叫完成通知,但當呼叫 RpcAsyncCompleteCall時,會收到錯誤碼。 不需要 RPC API 呼叫。 已清除所有 RPC 狀態。
用戶端會發出非中止或中止取消。 客戶端必須等候通知,並在通知送達時呼叫 RpcAsyncCompleteCall

 

在伺服器端清除中,關鍵概念是交接點。 在異步呼叫的伺服器端處理期間,某些處理通常會在接收呼叫的線程上執行(也稱為 發送器線程),然後選擇性地,發送器線程會將足夠的狀態放入記憶體區塊中,併發出另一個線程(也稱為 背景工作線程)以繼續處理呼叫。 發送器線程成功發出信號,表示背景工作線程稱為 交接點

伺服器端清除

發生錯誤 清理
交接點之前。 擲回例外狀況。 不需要呼叫 RpcAsyncCompleteCall
交接點之後。 呼叫 RpcAsyncAbortCall,或者,如果錯誤不是嚴重,而且結果仍可傳回給用戶端,RpcAsyncCompleteCall。 如果 RpcAsyncCompleteCall 函數調用失敗,RPC 運行時間會釋放參數。 使用者不得存取這些參數。 發送器線程不得執行任何可能在交接點之後失敗的實質性處理,因為它無法再安全地中止呼叫。 具體來說,它不得在卸除點之後擲回例外狀況,否則伺服器可能會當機。

 

管道的特殊錯誤處理案例

使用管道時發生錯誤處理的特殊情況。 下列清單說明失敗的來源,以及如何處理錯誤。

失敗來源 處理方式
用戶端呼叫推送,且呼叫失敗。 不需要 RPC API 呼叫。 已清除所有 RPC 狀態。
用戶端會先 呼叫 rpcAsyncCompleteCall,再清空管道中的 呼叫失敗,並出現適當的管道填滿錯誤碼。
用戶端呼叫提取且呼叫失敗。 不需要 RPC API 呼叫。 已清除所有 RPC 狀態。
用戶端或伺服器會依錯誤順序呼叫推播或提取。 運行時間會傳回管道填滿錯誤狀態。
伺服器會呼叫推送或提取,且呼叫失敗。 Push 會傳回失敗碼。 不需要呼叫 RpcAsyncCompleteCall
在管道清空之前,伺服器會呼叫 RpcAsyncCompleteCall 管道呼叫會傳回管道填滿錯誤狀態。
分派之後,接收作業會失敗。 下次伺服器呼叫提取以接收管道數據時,會傳回錯誤。