Exemplo n.º 1
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.SendMessage(
             new ScsRemoteInvokeReturnMessage
         {
             RepliedMessageId = requestMessage.MessageId,
             ReturnValue      = returnValue,
             RemoteException  = exception
         });
     }
     catch
     {
     }
 }
Exemplo n.º 2
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.SendMessage(
             new ScsRemoteInvokeReturnMessage
         {
             RepliedMessageId = requestMessage.MessageId,
             ReturnValue      = returnValue,
             RemoteException  = exception
         });
     }
     catch (Exception ex)
     {
         System.Diagnostics.Trace.Write($"SendInvokeResponse: {ex}");
     }
 }
 /// <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>
 /// <param name="parameters">
 /// Parameters possibly modified in the method call by out or ref
 /// </param>
 private static void SendInvokeResponse(IMessenger client, IScsMessage requestMessage, object returnValue, ScsRemoteException exception, object[] parameters = null)
 {
     try
     {
         client.SendMessage(new ScsRemoteInvokeReturnMessage
         {
             RepliedMessageId = requestMessage.MessageId,
             ReturnValue      = returnValue,
             RemoteException  = exception,
             Parameters       = parameters
         }, 10);
     }
     catch (Exception ex)
     {
         Logger.Error("Invoke response send failed", ex);
     }
 }
Exemplo n.º 4
0
 /// <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
     {
     }
 }
Exemplo n.º 5
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
     {
     }
 }
Exemplo n.º 6
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.SendMessage(new ScsRemoteInvokeReturnMessage {
             RepliedMessageId = requestMessage.MessageId, ReturnValue = returnValue, RemoteException = exception
         });
     }
     catch (Exception ex)
     {
         _log.Error($"Exception:'{ex}',Message:'{ex.Message}',StackTrace:'{ex.StackTrace}'");
     }
 }
Exemplo n.º 7
0
 /// <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
     {
         client.SendMessage(
             new ScsRemoteInvokeReturnMessage
         {
             RepliedMessageId = requestMessage.MessageId,
             ReturnValue      = returnValue,
             RemoteException  = exception
         }, 10);
     }
     catch
     {
     }
 }
Exemplo n.º 8
0
        /// <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>
        /// <param name="Parameters">Los parametros posiblemente modificados en la llamada al metodo mediante out o ref</param>
        private static void SendInvokeResponse(IMessenger client, IScsMessage requestMessage, object returnValue, ScsRemoteException exception, object[] Parameters = null)
        {
            try
            {
                client.SendMessage(
                    new ScsRemoteInvokeReturnMessage
                {
                    RepliedMessageId = requestMessage.MessageId,
                    ReturnValue      = returnValue,
                    RemoteException  = exception,
                    //Se devuelven todos los parametros con su respectiva modificacion a fin de poder tener metodos con out y ref
                    Parameters = Parameters
                });
            }
            catch (Exception ex)
            {
                //Si por ejemplo se intenta enviar como respuesta un objeto no serializable, la aplicacion se cuelga y el cliente no obtiene ningun dato que permita saber el porque
                try
                {
                    client.SendMessage(
                        new ScsRemoteInvokeReturnMessage
                    {
                        RepliedMessageId = requestMessage.MessageId,
                        RemoteException  = new ScsRemoteException("SendInvokeResponse: " + ex.Message, ex),
                    });
                }

                catch { }
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// Handles MessageReceived events of all clients, evaluates each message,
        /// finds appropriate service object and invokes appropriate method.
        /// </summary>
        /// <param name="sender">Source of event</param>
        /// <param name="e">Event arguments</param>
        private void Client_MessageReceived(object sender, MessageEventArgs e)
        {
            //Get RequestReplyMessenger object (sender of event) to get client
            var requestReplyMessenger = (RequestReplyMessenger <IScsServerClient>)sender;

            //Cast message to ScsRemoteInvokeMessage and check it
            var invokeMessage = e.Message as ScsRemoteInvokeMessage;

            if (invokeMessage == null)
            {
                return;
            }

            try
            {
                //Get client object
                var client = _serviceClients[requestReplyMessenger.Messenger.ClientId];
                if (client == null)
                {
                    requestReplyMessenger.Messenger.Disconnect();
                    return;
                }

                //Get service object
                var serviceObject = _serviceObjects[invokeMessage.ServiceClassName];
                if (serviceObject == null)
                {
                    SendInvokeResponse(requestReplyMessenger, invokeMessage, null, new ScsRemoteException("There is no service with name '" + invokeMessage.ServiceClassName + "'"));
                    return;
                }

                //Invoke method
                try
                {
                    object returnValue;
                    //Set client to service, so user service can get client
                    //in service method using CurrentClient property.
                    serviceObject.Service.CurrentClient = client;
                    try
                    {
                        returnValue = serviceObject.InvokeMethod(invokeMessage.MethodName, invokeMessage.Parameters);
                    }
                    finally
                    {
                        //Set CurrentClient as null since method call completed
                        serviceObject.Service.CurrentClient = null;
                    }

                    //Send method invocation return value to the client
                    SendInvokeResponse(requestReplyMessenger, invokeMessage, returnValue, null, invokeMessage.Parameters);
                }
                catch (TargetInvocationException ex)
                {
                    var innerEx = ex.InnerException;
                    //Si el atributo de servicio del objeto es null, al momento de levantar la excepcion no se muestra el error real sino un Object Reference
                    string detalle   = serviceObject.ServiceAttribute != null ? (Environment.NewLine + "Service Version: " + serviceObject.ServiceAttribute.Version) : "";
                    var    excepcion = new ScsRemoteException(innerEx.Message + detalle, innerEx);
                    SendInvokeResponse(requestReplyMessenger, invokeMessage, null, excepcion);
                    return;
                }
                catch (Exception ex)
                {
                    SendInvokeResponse(requestReplyMessenger, invokeMessage, null, new ScsRemoteException(ex.Message + Environment.NewLine + "Service Version: " + serviceObject.ServiceAttribute.Version, ex));
                    return;
                }
            }
            catch (Exception ex)
            {
                SendInvokeResponse(requestReplyMessenger, invokeMessage, null, new ScsRemoteException("An error occured during remote service method call.", ex));
                return;
            }
        }