| Platform SDK: Active Directory, ADSI, and Directory Services |
The following code fragment locates a server with the example RPC service:
//Begin the import. We explicitly start with the a known
//entry, "ExampleRpcServiceEntry". The interface we are
//looking for is defined by RpcExample_v1_0_s_ifspec, which
//is generated by MIDL.
status = RpcNsBindingImportBegin(RPC_C_NS_SYNTAX_DCE,
(TCHAR *)&szEntryName,
RpcExample_v1_0_c_ifspec,
NULL,
&hNs);
//Abandon if we cannot find anything or get any errors.
if (status != RPC_S_OK)
return;
//Now acquire the first available binding handle. In this
//example, implicit handles are used: the implicit handle
//"RpcExample_IfHandle" is generated by MIDL and defined in the
//MIDL-generated include file RpcExample.H.
//Loop through the bindings and try handles
//until one works.
while (status != RPC_S_NO_MORE_BINDINGS) {
status = RpcNsBindingImportNext(hNs,
&RpcExample_IfHandle);
if (status != RPC_S_OK)
continue;
//Convert the binding to a string and display it to
//the user/
RpcBindingToStringBinding(RpcExample_IfHandle,&pszBind);
_tprintf(TEXT("String Binding:%s\n"),pszBind);
//Extract the service name, the host, in this case).
ilen=_tcscspn((const TCHAR *)pszBind,TEXT(":"));
_tcscpy(szServiceInstance,(const TCHAR *)(pszBind+ilen+1));
RpcStringFree(&pszBind);
//Make the RPC - Call the Server, then shut it down.
RpcTryExcept {
bResult = ServerProc((TCHAR *)TEXT("Text sent to server"));
if (bResult)
_tprintf(TEXT("ServerProc: Server accepted call\n"));
else
_tprintf(TEXT("ServerProc: Server rejected call\n"));
bResult = Shutdown();
if (bResult)
_tprintf(TEXT("Shutdown: Server accepted call\n"));
else
_tprintf(TEXT("Shutdown: Server rejected call\n"));
status = RPC_S_NO_MORE_BINDINGS; //shut off the loop
}
RpcExcept(1) {
ulCode = RpcExceptionCode();
_tprintf(TEXT("RPC exception 0x%lx = %ld\n"), ulCode, ulCode);
}
RpcEndExcept;
//Free the imported binding.
RpcBindingFree(&RpcExample_IfHandle);
}
//Discard the Import handle, we don't need it any more.
status = RpcNsBindingImportDone(&hNs);