rpcEpRegisterNoReplace 函式 (rpcdce.h)
RpcEpRegisterNoReplace 函式會將伺服器位址資訊新增至本機端點對應資料庫。
語法
RPC_STATUS RpcEpRegisterNoReplace(
RPC_IF_HANDLE IfSpec,
RPC_BINDING_VECTOR *BindingVector,
UUID_VECTOR *UuidVector,
RPC_CSTR Annotation
);
參數
IfSpec
向本機端點對應資料庫註冊的介面。
BindingVector
系結句柄向量的指標,伺服器可透過此向量接收遠端過程調用。
UuidVector
伺服器所提供之物件 UUID 向量的指標。 伺服器應用程式會建構此向量。
Null 參數值表示沒有要註冊的物件 UUID。
Annotation
套用至每個新增至本機端點對應資料庫的跨產品專案之字元字串批註的指標。 字串長度最多可達 64 個字元,包括 Null 終止字元。 如果沒有批注字串,請指定 null 值或以 null 結尾的字串 (“\0”) 。
註釋字串僅供應用程式用於資訊。 RPC 不會使用此字串來判斷客戶端與哪個伺服器實例通訊,或是列舉端點對應資料庫中的元素。
傳回值
值 | 意義 |
---|---|
|
呼叫成功。 |
|
沒有系結。 |
|
系結句柄無效。 |
|
這是作業的系結錯誤類型。 |
備註
RpcEpRegisterNoReplace 函式會將專案新增至本機主機的 endpoint-map 資料庫。 此函式不會取代現有的資料庫專案。
當伺服器的多個實例在相同主機上執行時,伺服器會使用 RpcEpRegisterNoReplace ,而不是 RpcEpRegister 。 換句話說,當一個以上的伺服器實例隨時都會提供相同的介面 UUID、物件 UUID 和通訊協定序列時,請使用此函式。
由於呼叫 RpcEpRegisterNoReplace 時不會取代專案,因此伺服器必須在停止執行之前自行取消註冊。 否則,每次伺服器實例停止執行時,都會累積過時的數據,而不需呼叫 RpcEpUnregister。 過時專案會增加用戶端將接收不存在伺服器端點的可能性。 用戶端會在取得另一個端點之前,花時間嘗試與不存在的伺服器通訊。
伺服器可以使用 RpcEpRegister 和 RpcEpRegisterNoReplace 來註冊端點對應程式資料庫中的專案。 在 Windows 2000 之前,有兩個函式可供伺服器覆寫先前不再執行之伺服器實例左側端點對應程式資料庫中過時的專案。 端點對應程式資料庫會在伺服器停止運作時,自動移除伺服器實例所註冊的專案。 不過,基於安全性考慮,不允許伺服器取代另一部伺服器的端點對應程序專案。 因此, RpcEpRegister 和 RpcEpRegisterNoReplace 執行的功能大致相同。
伺服器應用程式會呼叫 RpcEpRegister ,以註冊呼叫下列任一函式所指定的端點:
- RpcServerUseAllProtseqs
- RpcServerUseProtseq
- RpcServerUseProtseqEp
- RpcServerUseAllProtseqsIf
- RpcServerUseProtseqIf
如果使用通訊協定序列而不指定端點,RPC 運行時間連結庫會自動產生動態端點。 在此情況下,伺服器可以呼叫 RpcServerInqBindings ,後面接著 RpcEpRegisterNoReplace ,讓多個用戶端自行使用。 否則,只有啟動伺服器的用戶端才知道自動啟動的伺服器。
每個新增至 endpoint-map 資料庫的元素邏輯都包含下列專案:
- 介面 UUID
- 介面版本 (主要和次要)
- 系結句柄
- 物件 UUID (選擇性)
- 註釋 (選擇性)
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | rpcdce.h (包含 Rpc.h) |
程式庫 | Rpcrt4.lib |
Dll | Rpcrt4.dll |