RPC 的運作方式
RPC 工具讓使用者看起來就像用戶端直接呼叫位於遠端伺服器程式中的程式一樣。 用戶端和伺服器各自有自己的位址空間;也就是說,每個都有自己的記憶體資源配置給程式所使用的資料。 下圖說明 RPC 架構。
如下圖所示,用戶端應用程式會呼叫本機存根程式,而不是實作程式的實際程式碼。 存根會編譯並連結至用戶端應用程式。 用戶端存根程式不會包含實作遠端程式的實際程式碼:
- 從用戶端位址空間擷取必要的參數。
- 視需要將參數轉譯為標準 NDR 格式,以便透過網路傳輸。
- 呼叫 RPC 用戶端執行時間程式庫中的函式,以將要求及其參數傳送至伺服器。
伺服器會執行下列步驟來呼叫遠端程式。
- 伺服器 RPC 執行時間程式庫函式會接受要求並呼叫伺服器存根程式。
- 伺服器存根會從網路緩衝區擷取參數,並將其從網路傳輸格式轉換為伺服器所需的格式。
- 伺服器存根會呼叫伺服器上的實際程式。
然後,遠端程式會執行,可能會產生輸出參數和傳回值。 當遠端程式完成時,類似的步驟順序會將資料傳回給用戶端。
- 遠端程式會將其資料傳回至伺服器存根。
- 伺服器存根會將輸出參數轉換為透過網路傳輸所需的格式,並將其傳回至 RPC 執行時間程式庫函式。
- 伺服器 RPC 執行時間程式庫函式會將網路上的資料傳輸至用戶端電腦。
用戶端會透過網路接受資料,並將其傳回給呼叫函式,以完成此程式。
- 用戶端 RPC 執行時間程式庫會收到遠端程式傳回值,並將其傳回至用戶端存根。
- 用戶端存根會將資料從其 NDR 轉換為用戶端電腦所使用的格式。 存根會將資料寫入用戶端記憶體,並將結果傳回用戶端上的呼叫程式。
- 呼叫程式會繼續,就像已在相同電腦上呼叫程式一樣。
執行時間程式庫是以兩個部分提供:匯入程式庫,與應用程式和 RPC 執行時間程式庫,實作為動態連結程式庫 (DLL) 。
伺服器應用程式包含伺服器執行時間程式庫函式的呼叫,可註冊伺服器的介面,並允許伺服器接受遠端程序呼叫。 伺服器應用程式也包含用戶端應用程式所呼叫的應用程式特定遠端程式。