隱含系結控制碼

隱含系結控制碼可讓您的應用程式選取特定伺服器來執行其遠端程序呼叫。 如需詳細資訊,請參閱 用戶端系結。 它們也會讓您的用戶端/伺服器程式使用已驗證的系結。 也就是說,用戶端可以在隱含系結控制碼中指定驗證資訊。 RPC 執行時間程式庫會使用驗證資訊,在用戶端與伺服器之間建立已驗證的 RPC 會話。 如需詳細資訊,請參閱安全性

注意

隱含系結控制碼不是安全線程。 因此,多執行緒應用程式應該避免使用隱含系結控制碼。

 

當您的應用程式使用隱含系結時,用戶端必須設定系結資訊,才能建立系結。 用戶端建立隱含系結之後,不需要將任何系結控制碼傳遞至遠端程式。 RPC 程式庫會處理通訊會話的其餘機制。

用戶端會將隱含控制碼的系結資訊儲存在全域變數中。 當 MIDL 編譯器從 MIDL 檔案中的介面規格產生用戶端存根和標頭檔時,它也會產生全域系結控制碼變數的程式碼。 您的用戶端程式會初始化控制碼,然後在終結系結之前,不會再次參考它。

您可以在介面的 ACF 中指定 [implicit_handle] 屬性,以建立隱含控制碼,如下所示:

/* ACF file (complete) */
 
[
  implicit_handle(handle_t hHello)
]
interface hello
{
}

上述範例中使用的 handle_t 類型是用於定義系結控制碼的 MIDL 資料類型。

建立隱含控制碼之後,應用程式必須使用它做為 RPC 執行時間程式庫函式的參數。 請勿使用隱含控制碼做為遠端程序呼叫的參數。 下列程式碼範例示範如何使用隱含系結控制碼。

RPC_STATUS status;
status = RpcBindingFromStringBinding(
            pszStringBinding,
            &hHello);
 
status = MyRemoteProcedure();
 
status = RpcBindingFree(hHello);
...

在上述範例中,RPC 執行時間程式庫函式 RpcBindingFromStringBindingRpcBindingFree 都需要隱含系結控制碼傳入其參數清單中。 不過,遠端程式 MyRemoteProcedure 沒有,因為它不是 RPC 執行時間程式庫函式。