Implizite Bindungshandles

Implizite Bindungshandles ermöglichen es Ihrer Anwendung, einen bestimmten Server auszuwählen, um die Remoteprozeduraufrufe auszuführen. Weitere Informationen finden Sie unter Clientseitige Bindung. Außerdem ermöglichen sie Ihrem Client-/Serverprogramm die Verwendung authentifizierter Bindungen. Das heißt, der Client kann Authentifizierungsinformationen in einem impliziten Bindungshandle angeben. Die RPC-Laufzeitbibliothek verwendet die Authentifizierungsinformationen, um eine authentifizierte RPC-Sitzung zwischen dem Client und dem Server einzurichten. Weitere Informationen finden Sie unter Sicherheit.

Hinweis

Implizite Bindungshandles sind nicht threadsicher. Multithreadanwendungen sollten daher die Verwendung impliziter Bindungshandles vermeiden.

Wenn Ihre Anwendung implizite Bindungen verwendet, muss der Client die Bindungsinformationen festlegen, damit die Bindung erstellt werden kann. Nachdem der Client eine implizite Bindung erstellt hat, muss er keine Bindungshandles an Remoteprozeduren übergeben. Die RPC-Bibliothek verarbeitet die restlichen Mechanismen der Kommunikationssitzung.

Der Client speichert die Bindungsinformationen für ein implizites Handle in einer globalen Variablen. Wenn der MIDL-Compiler den Clientstub und die Headerdatei aus der Schnittstellenspezifikation in Ihrer MIDL-Datei generiert, generiert er auch Code für eine globale Bindungshandlevariable. Das Clientprogramm initialisiert das Handle und verweist erst dann erneut darauf, wenn es die Bindung zerstört.

Sie erstellen ein implizites Handle, indem Sie das [ implizite _ Handleattribut ] im ACF für eine Schnittstelle wie folgt angeben:

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

Der handle _ t-Typ, der im vorherigen Beispiel verwendet wird, ist ein MIDL-Datentyp, der zum Definieren von Bindungshandles verwendet wird.

Nachdem das implizite Handle erstellt wurde, muss die Anwendung es als Parameter für die RPC-Laufzeitbibliotheksfunktionen verwenden. Verwenden Sie das implizite Handle nicht als Parameter für Remoteprozeduraufrufe. Im folgenden Codebeispiel wird die Verwendung impliziter Bindungshandles veranschaulicht.

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

Im vorherigen Beispiel erforderten die RPC-Laufzeitbibliotheksfunktionen RpcBindingFromStringBinding und RpcBindingFree, dass das implizite Bindungshandle in ihren Parameterlisten übergeben wurde. Die Remoteprozedur MyRemoteProcedure hat dies jedoch nicht getan, da es sich nicht um eine RPC-Laufzeitbibliotheksfunktion handelt.