共用方式為


指定端點

端點是用於遠端程序呼叫的服務器程序的特定網路位址。 端點的實際名稱取決於所使用的通訊協議順序。 例如,TCP、UDP 和 HTTP 會使用埠。 命名管道會使用命名管道名稱。 用戶端/伺服器應用程式可以使用已知的端點或動態端點。 本節提供伺服器程式用來指定已知和動態端點的技術。 下列主題會討論此資訊:

指定已知的端點

當您的伺服器使用已知的端點時,它可以將端點資料作為其名稱服務資料庫條目的一部分。 如果這樣做,當用戶端從伺服器專案匯入系結句柄時,用戶端的系結句柄會包含包含已知端點的完整伺服器位址。

您的伺服器程式也可以同時指定已知的端點,同時指定通訊協定序列。 叫用 RpcServerUseProtseqEpRpcServerUseProtseqEpEx 函式。 兩者之間的差異在於後者函式具有伺服器可用來控制動態埠配置的額外參數。

如果您的伺服器程式以這種方式指定其端點資訊,它也應該呼叫 RpcEpRegister 函式,以在端點對應中註冊端點。 即使端點一律相同,客戶端還是可以使用端點對應來尋找伺服器。

如同通訊協定序列,應用程式可以在其IDL檔案中指定端點資訊。 當這樣做時,它應該同時註冊通訊協定序列和端點,方法是叫用 RpcServerUseAllProtseqsIfRpcServerUseAllProtseqsIfEx 函式。 在此情況下,用戶端可透過IDL檔案中的介面規格存取端點資訊。 因此,不需要呼叫 RpcEpRegister 函式。

指定動態端點

動態端點是伺服器主計算機開始執行時指派的端點。 大部分的伺服器應用程式都會使用動態端點,以避免與其他程式發生衝突,因為伺服器主計算機系統上可用的埠數目有限。 不過,使用命名管道或 ncalrpc 通訊協定序列的程式具有非常大的端點名稱空間。 與使用其他傳輸方式的程式相比,它們從動態端點中獲益較少。

伺服器程式會在端點對應資料庫中註冊動態端點。 如果您要讓伺服器使用任何可用的端點,請呼叫 RpcServerUseAllProtSeqsRpcServerUseAllProtseqsExRpcServerUseProtseqRpcServerUseProtseqEx。 這會設定 RPC 執行期庫,以使用動態端點的所有或一組有效的通訊協定序列。 然後,伺服器應該呼叫 RpcServerInqBindings,以取得一組有效的系結句柄。 伺服器會將系結句柄或系結向量集合傳遞至函式 RpcEpRegister,以在端點對應中註冊所有適當的端點。 每當伺服器呼叫 RpcEpRegister時,應該有相應的 RpcBindingVectorFree 呼叫,以釋放系結向量所使用的記憶體。

請注意,伺服器程式可以使用 RpcEpRegisterNoReplace 函式,而不是 RpcEpRegister。 當伺服器程式的多個複本必須在伺服器主機系統上執行時,程式通常會使用 RpcEpRegisterNoReplace

RpcEpRegisterRpcEpRegisterNoReplace 函式會將伺服器的介面和綁定控制代碼新增至端點映射資料庫。 當用戶端使用部分系結句柄進行遠端過程調用時,用戶端的執行階段庫會向伺服器的端點對應程式詢問相容的伺服器實例的端點。 用戶端連結庫會提供介面 UUID、通訊協定序列,如果存在,用戶端系結句柄中的物件 UUID。 端點對應程式會尋找與客戶端資訊相符的資料庫專案。 用戶端/伺服器介面 UUID、介面主要版本和通訊協定順序必須完全相符。 此外,伺服器的介面次要版本必須大於或等於用戶端的次要版本。

如果所有測試都成功,端點對應程式會傳回有效的端點,而用戶端運行時間連結庫會更新系結句柄中的端點。

當伺服器進程停止執行時,動態端點會自動從端點對應程式資料庫清除。 您可以在伺服器程式結束之前使用 RpcEpUnregister 函式先從端點映射資料庫中移除端點,也可以允許自動清除來管理端點的移除。