Implizite Bindungshandles
Implizite Bindungshandles ermöglichen es Ihrer Anwendung, einen bestimmten Server auszuwählen, um ihre Remoteprozeduraufrufe auszuführen. Weitere Informationen finden Sie unter Clientseitige Bindung. Sie ermöglichen es Ihrem Client-/Serverprogramm auch, authentifizierte Bindungen zu verwenden. Das heißt, der Client kann Authentifizierungsinformationen in einem impliziten Bindungshandle angeben. Die RPC-Laufzeitbibliothek verwendet die Authentifizierungsinformationen, um eine authentifizierte RPC-Sitzung zwischen Client und 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 er die Bindung erstellen kann. Nachdem der Client eine implizite Bindung erstellt hat, muss er keine Bindungshandles an Remoteprozeduren übergeben. Die RPC-Bibliothek behandelt den Rest der Mechanismen der Kommunikationssitzung.
Der Client speichert die Bindungsinformationen für ein implizites Handle in einer globalen Variablen. Wenn der MIDL-Compiler den Client-Stub und die Headerdatei aus der Schnittstellenspezifikation in Ihrer MIDL-Datei generiert, generiert er auch Code für eine globale Bindungshandlevariable. Ihr Clientprogramm initialisiert das Handle und verweist dann nicht erneut darauf, bis es die Bindung zerstört.
Sie erstellen ein implizites Handle, indem Sie das Attribut [implicit_handle] 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.
Nach dem Erstellen des impliziten Handles 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 mussten die RPC-Laufzeitbibliotheksfunktionen RpcBindingFromStringBinding und RpcBindingFree das implizite Bindungshandle in ihren Parameterlisten übergeben werden. Die Remoteprozedur MyRemoteProcedure jedoch nicht, da es sich nicht um eine RPC-Laufzeitbibliotheksfunktion handelt.