예제 #1
0
파일: Class1.cs 프로젝트: winphone3721/-C-
        public override IMessage Invoke(IMessage myMessage)
        {
            Console.WriteLine("MyProxy 'Invoke method' Called...");
            if (myMessage is IMethodCallMessage)
            {
                Console.WriteLine("IMethodCallMessage");
            }
            if (myMessage is IMethodReturnMessage)
            {
                Console.WriteLine("IMethodReturnMessage");
            }
            if (myMessage is IConstructionCallMessage)
            {
                // Initialize a new instance of remote object
                IConstructionReturnMessage myIConstructionReturnMessage =
                    this.InitializeServerObject((IConstructionCallMessage)myMessage);
                ConstructionResponse constructionResponse = new
                                                            ConstructionResponse(null, (IMethodCallMessage)myMessage);
                return(constructionResponse);
            }
            IDictionary myIDictionary = myMessage.Properties;
            IMessage    returnMessage;

            myIDictionary["__Uri"] = myUri;

            // Synchronously dispatch messages to server.
            returnMessage = ChannelServices.SyncDispatchMessage(myMessage);
            // Pushing return value and OUT parameters back onto stack.
            IMethodReturnMessage myMethodReturnMessage = (IMethodReturnMessage)returnMessage;

            return(returnMessage);
        }
        public override IMessage Invoke(IMessage message)
        {
            if (message is IConstructionCallMessage)
            {
                IConstructionReturnMessage myIConstructionReturnMessage =
                    this.InitializeServerObject((IConstructionCallMessage)message);
                ConstructionResponse constructionResponse = new
                                                            ConstructionResponse(null, (IMethodCallMessage)message);
                return(constructionResponse);
            }
            IMethodCallMessage methodMessage = new MethodCallMessageWrapper((IMethodCallMessage)message);

            MethodBase method = methodMessage.MethodBase;

            object returnValue = null;

            if (method.DeclaringType == typeof(IDynamicProxy))
            {
                returnValue = method.Invoke(this, methodMessage.Args);
            }
            else
            {
                returnValue = InvocationHandler(ProxyTargetTyped, method, methodMessage.Args);
            }

            ReturnMessage returnMessage = new ReturnMessage(returnValue, methodMessage.Args, methodMessage.ArgCount, methodMessage.LogicalCallContext, methodMessage);

            return(returnMessage);
        }
예제 #3
0
        public override IMessage Invoke(IMessage msg)
        {
            if (msg is IConstructionCallMessage)
            {
                // Initialize a new instance of remote object
                IConstructionReturnMessage myIConstructionReturnMessage =
                    this.InitializeServerObject((IConstructionCallMessage)msg);
                ConstructionResponse constructionResponse = new
                                                            ConstructionResponse(null, (IMethodCallMessage)msg);
                return(constructionResponse);
            }
            IDictionary myIDictionary = msg.Properties;
            IMessage    retMsg;

            myIDictionary["__Uri"] = m_URI;

            // Synchronously dispatch messages to server.
            retMsg = ChannelServices.SyncDispatchMessage(msg);
            // Pushing return value and OUT parameters back onto stack
            IMethodReturnMessage mrm = (IMethodReturnMessage)retMsg;

            return(retMsg);
        }