Delen via


Impliciete bindingsgrepen

Met impliciete bindingsgrepen kan uw toepassing een specifieke server selecteren om de externe procedure-aanroepen uit te voeren. Voor meer informatie, zie Client-Side Binding. Ze stellen uw client-/serverprogramma ook in staat om geverifieerde bindingen te gebruiken. Dat wil gezegd, de client kan verificatiegegevens opgeven in een impliciete bindingshandler. De RPC-runtimebibliotheek gebruikt de verificatiegegevens om een geverifieerde RPC-sessie tot stand te brengen tussen de client en de server. Zie Securityvoor meer informatie.

Notitie

Impliciete bindingsgrepen zijn niet threadveilig. Toepassingen met meerdere threads moeten daarom geen impliciete bindingsingangen gebruiken.

 

Wanneer uw toepassing impliciete bindingen gebruikt, moet de client de bindingsgegevens instellen zodat deze de binding kan maken. Nadat de client een impliciete binding heeft gemaakt, hoeft deze geen bindingsgrepen door te geven aan externe procedures. De RPC-bibliotheek verwerkt de rest van de mechanica van de communicatiesessie.

De client slaat de bindingsinformatie op voor een impliciete ingang in een globale variabele. Wanneer de MIDL-compiler het client-stub- en headerbestand genereert op basis van de interfacespecificatie in uw MIDL-bestand, wordt ook code gegenereerd voor een globale bindingsgreepvariabele. Uw clientprogramma initialiseert de handle en verwijst er pas weer naar totdat de binding wordt vernietigd.

U maakt een impliciete ingang door als volgt het kenmerk [implicit_handle] op te geven in de ACF voor een interface:

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

Het handle_t type, dat in het vorige voorbeeld wordt gebruikt, is een MIDL-gegevenstype dat wordt gebruikt voor het definiƫren van bindingsgrepen.

Nadat de impliciete ingang is gemaakt, moet de toepassing deze gebruiken als parameter voor de RPC-runtimebibliotheekfuncties. Gebruik de impliciete ingang niet als parameter voor aanroepen van externe procedures. In het volgende codevoorbeeld ziet u het gebruik van impliciete bindingsingangen.

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

In het vorige voorbeeld moesten de RPC-runtimebibliotheekfuncties RpcBindingFromStringBinding en RpcBindingFree beide de impliciete bindingshandle doorgegeven worden in hun parameterlijsten. De externe procedure MyRemoteProcedure functioneerde echter niet, aangezien het geen functie van de RPC-runtimebibliotheek is.