3.1.5.3 Resolving Object Reference

When de-serializing the message content, if an ObjRef is encountered and has the fIsMarshalled field set to true, then it MUST be converted either into a Proxy or a Server Object. To create a Proxy, an implementation requires a Request URI and a Server Type. The Server Type MUST be obtained from the typeInfo field of the ObjRef. The Request URI MUST be obtained as follows:

  • As specified in ObjRef (section 2.2.2.1), if the value of the objRefFlags field has the second lowest bit (value of 2), then the uri field of the ObjRef has an absolute URI that MUST be used as the Request URI.

  • If the value of the objRefFlags field has the second lowest bit (value of 2) not set, then the uri field contains a relative URI. ObjRef.ChannelInfo.ChannelData contains information about the available channel, including any intraprocess and interprocess channel. An implementation MUST ignore ChannelData information if the implementation does not understand the structure. An implementation MAY choose any one of the channels. The implementation MUST combine the relative URI specified in the uri field with the Channel URI of the chosen channel to get the Request URI.<42>

If the host subcomponent of the Request URI refers to the implementation's machine and if the Server Object URI part of the Request URI is present in the Server Object Table, then the ObjRef is resolved to the actual Server Object in the ServerObjectTable. In this case, the de-serialized object graph contains the actual Server Object. Otherwise, a new Proxy MUST be created from the Request URI and the Server Type, as specified in Creating Proxy from Request URI and Server Type (section 3.3.4.1.1).