The RPC run-time library dispatches an incoming remote procedure call to a manager that offers the requested RPC interface. When multiple managers are registered for an interface, the RPC run-time library must select one of them. To select a manager, the RPC run-time library uses the object UUID specified by the call's binding handle.
The run-time library applies the following rules when interpreting the object UUID of a remote procedure call:
A nil object UUID is automatically assigned the nil type UUID (it is illegal to specify a nil object UUID in the RpcObjectSetType routine). Therefore, a remote procedure call whose binding handle contains a nil object UUID is automatically dispatched to the manager registered with the nil type UUID, if any.
In principle, a remote procedure call whose binding handle contains a non-nil object UUID should be processed by a manager whose type UUID matches the type of the object UUID. However, identifying the correct manager requires that the server has specified the type of that object UUID by calling the RpcObjectSetType routine.
If a server fails to call the RpcObjectSetType routine for a non-nil object UUID, a remote procedure call for that object UUID goes to the manager EPV that services remote procedure calls with a nil object UUID (that is, the nil type UUID).
Remote procedure calls with a non-nil object UUID in the binding handle cannot be executed if the server assigned that non-nil object UUID a type UUID by calling the RpcObjectSetType routine, but did not also register a manager EPV for that type UUID by calling the RpcServerRegisterIfEx or RpcServerRegisterIf routine.
Object UUID of call | Server set type for object UUID? | Server registered EPV type? | Dispatching action |
---|---|---|---|
Nil | Not applicable | Yes | Uses the manager with the nil type UUID. |
Nil | Not applicable | No | Error (RPC_S_UNSUPPORTED_TYPE); rejects the remote procedure call. |
Non-nil | Yes | Yes | Uses the manager with the same type UUID. |
Non-nil | No | Ignored | Uses the manager with the nil type UUID. If no manager with the nil type UUID, error (RPC_S_UNSUPPORTEDTYPE); rejects the remote procedure call. |
Non-nil | Yes | No | Error (RPC_S_UNSUPPORTEDTYPE); rejects the remote procedure call. |
The object UUID of the call is the object UUID found in a binding handle for a remote procedure call.
The server sets the type of the object UUID by calling RpcObjectSetType to specify the type UUID for an object.
The server registers the type for the manager EPV by calling RpcServerRegisterIf* using the same type UUID.
The nil object UUID is always automatically assigned the nil type UUID. It is illegal to specify a nil object UUID in the RpcObjectSetType routine.