private static MessageModule.Interfaces.IMessageAgent MessageFactory(string Assemblie)
        {
            Type typetoreturn = Type.GetType(Assemblie);

            MessageModule.Interfaces.IMessageAgent oRetorno = (MessageModule.Interfaces.IMessageAgent)Activator.CreateInstance(typetoreturn);
            return(oRetorno);
        }
        public static void StartProcess()
        {
            try
            {
                //get message to send
                List <MessageModule.Interfaces.Models.MessageModel> lstMessageToSend =
                    MessageModule.DAL.Controller.MessageDataController.Instance.MessageQueueGetMessageToProcess();

                if (lstMessageToSend != null && lstMessageToSend.Count > 0)
                {
                    //log file
                    LogFile("Start send " + lstMessageToSend.Count.ToString());

                    lstMessageToSend.All(mts =>
                    {
                        try
                        {
                            if (MessageModule.Interfaces.Models.MessageConfig.AgentConfig.ContainsKey(mts.Agent))
                            {
                                //get message instance
                                string strAssemblie = MessageModule.Interfaces.Models.MessageConfig.
                                                      AgentConfig
                                                      [mts.Agent]
                                                      [MessageModule.Interfaces.General.Constants.C_Agent_Assemblie];
                                MessageModule.Interfaces.IMessageAgent oConcretAgent = MessageFactory(strAssemblie);

                                //send message
                                mts = oConcretAgent.SendMessage(mts);
                            }
                        }
                        catch (Exception err)
                        {
                            mts.IsSuccess     = false;
                            mts.ProcessResult = "Error::" + err.Message + " - " + err.StackTrace;
                        }
                        finally
                        {
                            //register process message
                            mts.QueueProcessId =
                                MessageModule.DAL.Controller.MessageDataController.Instance.QueueProcessProcessMessage
                                    (mts.MessageQueueId,
                                    mts.IsSuccess,
                                    mts.ProcessResult);
                        }

                        return(true);
                    });

                    //log file
                    LogFile("End send " + lstMessageToSend.Count.ToString());
                }
            }
            catch (Exception err)
            {
                //log file for fatal error
                LogFile("Fatal error::" + err.Message + " - " + err.StackTrace);
            }
        }