共用方式為


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 管道呼叫會傳回管道填滿錯誤狀態。
分派之後,接收作業會失敗。 下次伺服器呼叫提取以接收管道資料時,會傳回錯誤。