PreviousNext

Defining a Compatible Server

Compatible binding information identifies a server whose communications capabilities (RPC protocol and protocol version, network and transport protocols, and transfer syntax) are compatible with those of the client. Compatible binding information is sufficient for establishing a binding. However, binding information is insufficient for ensuring that the binding is to a compatible server.

The additional information required that a client imposes on the RPC runtime includes an RPC interface identifier and an object UUID, as follows:

· Interface identifier

The interface UUID and version numbers of an RPC interface:

- Interface UUID: The interface UUID, unlike the interface name, clearly identifies the RPC interface across time and space.

- Interface version number: The combined major and minor version numbers identify one generation of an interface.

Version numbers allow multiple versions of an RPC interface to coexist. Strict rules govern valid changes to an interface and determine whether different versions of an interface are compatible. For a description of these rules, see Interface Definition Language on IDL syntax and usage.

The runtime uses the version number of an RPC interface to decide whether the version offered by a given server is compatible with the version requested by a client. The offered and requested interface are compatible under the following conditions:

- The interface requested by the client and the interface offered by the server have the same major version number.

- The interface requested by the client has a minor version number less than or equal to that of the interface offered by the server.

· Object UUID

A UUID that identifies a particular object.

An object is a distinct computing resource, such as a particular database, a specific RPC service that a remote procedure can access, and so on; for example, personal calendars may be RPC objects to a calendar service. Accessing an object requires including its object UUID with the binding information used for establishing a binding. A client can request a specific RPC object when requesting new binding information, or the client can ask the runtime to associate an object UUID with binding information the client already has available.

Sometimes the object UUID is the nil UUID; when calling an RPC runtime routine, you can represent the nil UUID by specifying NULL. In this case, the object UUID does not represent any object. Often, however, the object UUID represents a specific RPC object and is a non-nil value. To create a non-nil object UUID, a server calls the uuid_create( ) routine, which returns a UUID that the server then associates with a particular object.

If a client requests a non-nil object UUID, the client runtime uses that UUID as one of the criteria for a compatible server. When searching the namespace for server binding information, the client runtime looks for the requested interface identifier and object UUID. The endpoint map service uses this same information to help find a compatible server.

The following figure illustrates the aspects of a server and its system that are identified by the client's server binding information, requested interface identifier, and requested object UUID.


Information Used to Identify a Compatible Server