System.Runtime.Remoting.RemotingServices.SetOrCreateProxy C# (CSharp) Méthode

SetOrCreateProxy() private static méthode

private static SetOrCreateProxy ( Identity idObj, Type classToProxy, Object proxy ) : MarshalByRefObject
idObj Identity
classToProxy Type
proxy Object
Résultat MarshalByRefObject
        private static MarshalByRefObject SetOrCreateProxy(
            Identity idObj, Type classToProxy, Object proxy)

        {
            Message.DebugOut("Entering SetOrCreateProxy for type \n");

            RealProxy realProxy = null;
            // If a proxy has not been supplied create one
            if (null == proxy)
            {
                // Create a remoting proxy
                Message.DebugOut("SetOrCreateProxy::Creating Proxy for " +
                                 classToProxy.FullName + "\n");

                ServerIdentity srvID = idObj as ServerIdentity;
                if (idObj.ObjectRef != null)
                {
                    ProxyAttribute pa = ActivationServices.GetProxyAttribute(classToProxy);                
                    realProxy = pa.CreateProxy(idObj.ObjectRef,
                                           classToProxy,
                                           null,
                                           null);
                }
                if(null == realProxy)
                {
                    // The custom proxy attribute does not want to create a proxy. We create a default 
                    // proxy in this case.
                    ProxyAttribute defaultProxyAttribute = ActivationServices.DefaultProxyAttribute;
 
                    realProxy = defaultProxyAttribute.CreateProxy(idObj.ObjectRef,
                                                                  classToProxy,
                                                                  null,
                                                                  (null == srvID ? null : 
                                                                                   srvID.ServerContext));
                }
            }
            else
            {
                BCLDebug.Assert(IsTransparentProxy(proxy),"IsTransparentProxy(proxy)");

                // Extract the remoting proxy from the transparent proxy
                Message.DebugOut("SetOrCreateProxy::Proxy already created \n");
                realProxy = GetRealProxy(proxy);
            }

            BCLDebug.Assert(null != realProxy,"null != realProxy");

            // Set the back reference to the identity in the proxy object
            realProxy.IdentityObject = idObj;

            // Set the reference to the proxy in the identity object
            proxy = realProxy.GetTransparentProxy();
            proxy = idObj.RaceSetTransparentProxy(proxy);

            Message.DebugOut("Leaving SetOrCreateProxy\n");
            // return the transparent proxy
            return (MarshalByRefObject)proxy;
        }
RemotingServices