internal Object GetRealObjectHelper()
{
// Check if we are a result of serialiazing an MBR object
// or if someone wanted to pass an ObjRef itself
if (!IsMarshaledObject())
{
BCLDebug.Trace("REMOTE", "ObjRef.GetRealObject: Returning *this*\n");
return this;
}
else
{
// Check if this is a lightweight objref
if(IsObjRefLite())
{
BCLDebug.Assert(null != uri, "null != uri");
// transform the url, if this is a local object (we know it is local
// if we find the current application id in the url)
int index = uri.IndexOf(RemotingConfiguration.ApplicationId);
// we need to be past 0, since we have to back up a space and pick up
// a slash.
if (index > 0)
uri = uri.Substring(index - 1);
}
// In the general case, 'this' is the
// objref of an activated object
// It may also be a well known object ref ... which came by
// because someone did a Connect(URL) and then passed the proxy
// over to a remote method call.
// The below call handles both cases.
bool fRefine = !(GetType() == typeof(ObjRef));
Object ret = RemotingServices.Unmarshal(this, fRefine);
// Check for COMObject & do some special custom marshaling
ret = GetCustomMarshaledCOMObject(ret);
return ret;
}
}