Beispiel #1
0
        /// <summary>
        /// Overrides message calls and translates them to messages to remote application.
        ///
        /// </summary>
        /// <param name="msg">Method invoke message (from RealProxy base class)</param>
        /// <returns>
        /// Method invoke return message (to RealProxy base class)
        /// </returns>
        public override IMessage Invoke(IMessage msg)
        {
            IMethodCallMessage mcm = msg as IMethodCallMessage;

            if (mcm == null)
            {
                return((IMessage)null);
            }
            ScsRemoteInvokeReturnMessage invokeReturnMessage = this._clientMessenger.SendMessageAndWaitForResponse((IScsMessage) new ScsRemoteInvokeMessage()
            {
                ServiceClassName = typeof(TProxy).Name,
                MethodName       = mcm.MethodName,
                Parameters       = mcm.InArgs
            }) as ScsRemoteInvokeReturnMessage;

            if (invokeReturnMessage == null)
            {
                return((IMessage)null);
            }
            if (invokeReturnMessage.RemoteException == null)
            {
                return((IMessage) new ReturnMessage(invokeReturnMessage.ReturnValue, (object[])null, 0, mcm.LogicalCallContext, mcm));
            }
            else
            {
                return((IMessage) new ReturnMessage((Exception)invokeReturnMessage.RemoteException, mcm));
            }
        }
Beispiel #2
0
        /// <summary>
        /// Overrides message calls and translates them to messages to remote application.
        /// </summary>
        /// <param name="msg">Method invoke message (from RealProxy base class)</param>
        /// <returns>Method invoke return message (to RealProxy base class)</returns>
        public override IMessage Invoke(IMessage msg)
        {
            IMethodCallMessage message = msg as IMethodCallMessage;

            if (message == null)
            {
                return(null);
            }

            ScsRemoteInvokeMessage requestMessage = new ScsRemoteInvokeMessage
            {
                ServiceClassName = typeof(TProxy).Name,
                MethodName       = message.MethodName,
                Parameters       = message.InArgs
            };

            ScsRemoteInvokeReturnMessage responseMessage = _clientMessenger.SendMessageAndWaitForResponse(requestMessage, 10) as ScsRemoteInvokeReturnMessage;

            if (responseMessage == null)
            {
                return(null);
            }

            return(responseMessage.RemoteException != null
                       ? new ReturnMessage(responseMessage.RemoteException, message)
                       : new ReturnMessage(responseMessage.ReturnValue, null, 0, message.LogicalCallContext, message));
        }
 /// <summary>
 /// Sends response to the remote application that invoked a service method.
 ///
 /// </summary>
 /// <param name="client">Client that sent invoke message</param><param name="requestMessage">Request message</param><param name="returnValue">Return value to send</param><param name="exception">Exception to send</param>
 private static void SendInvokeResponse(IMessenger client, IScsMessage requestMessage, object returnValue, ScsRemoteException exception)
 {
     try
     {
         IMessenger messenger = client;
         ScsRemoteInvokeReturnMessage invokeReturnMessage1 = new ScsRemoteInvokeReturnMessage();
         invokeReturnMessage1.RepliedMessageId = requestMessage.MessageId;
         invokeReturnMessage1.ReturnValue      = returnValue;
         invokeReturnMessage1.RemoteException  = exception;
         ScsRemoteInvokeReturnMessage invokeReturnMessage2 = invokeReturnMessage1;
         messenger.SendMessage((IScsMessage)invokeReturnMessage2);
     }
     catch
     {
     }
 }
Beispiel #4
0
 /// <summary>
 /// Sends response to the remote application that invoked a service method.
 ///
 /// </summary>
 /// <param name="requestMessage">Request message</param><param name="returnValue">Return value to send</param><param name="exception">Exception to send</param>
 private void SendInvokeResponse(IScsMessage requestMessage, object returnValue, ScsRemoteException exception)
 {
     try
     {
         RequestReplyMessenger <IScsClient> requestReplyMessenger = this._requestReplyMessenger;
         ScsRemoteInvokeReturnMessage       invokeReturnMessage1  = new ScsRemoteInvokeReturnMessage();
         invokeReturnMessage1.RepliedMessageId = requestMessage.MessageId;
         invokeReturnMessage1.ReturnValue      = returnValue;
         invokeReturnMessage1.RemoteException  = exception;
         ScsRemoteInvokeReturnMessage invokeReturnMessage2 = invokeReturnMessage1;
         requestReplyMessenger.SendMessage((IScsMessage)invokeReturnMessage2);
     }
     catch
     {
     }
 }