public Identifier[] Push(string AppInstance, string Culture, string Version, Message[] messages)
        {
            try
            {
                DateTime lastSettingsDate = DateTime.MaxValue;

                if (Version != null)
                {
                    var pos = Version.IndexOf('?');
                    if (pos > 0)
                    {
                        lastSettingsDate = DateTime.MinValue;
                        DateTime.TryParse(Version.Substring(pos + 1), out lastSettingsDate);
                        Version = Version.Substring(0, pos);
                    }
                }

                var result = new List <Identifier>();
                using (var db = new DailyLog_dbEntities())
                {
                    //db.Database.CommandTimeout = 120;
                    foreach (var msg in messages)
                    {
                        try{
                            if (msg.MessageType == "MilestoneMessage" && msg.Body.Contains("New Install"))
                            {
                                OperationContext              context  = OperationContext.Current;
                                MessageProperties             prop     = context.IncomingMessageProperties;
                                RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
                                string ip = endpoint.Address;
                                msg.Body = msg.Body.Replace("<Value>" + Version + "</Value>", "<Value>" + ip + "</Value>");
                            }
                        } catch {}

                        var MQ = new MessageQueue();
                        MQ.AppInstance      = AppInstance;
                        MQ.ClientKey        = msg.Key;
                        MQ.MessageType      = msg.MessageType;
                        MQ.IsServerIncoming = true;
                        MQ.Message          = msg.Body;
                        MQ.Created          = DateTime.Now;
                        MQ.Version          = Version;
                        MQ.Culture          = Culture;
                        db.MessageQueues.Add(MQ);
                        result.Add(new Identifier()
                        {
                            Key = msg.Key
                        });
                    }
                    db.SaveChanges();
                }

                foreach (var msg in messages)
                {
                    if (msg != null && msg.MessageType == "EmailOutMessage")
                    {
                        ProcessEmailMessage(AppInstance, msg);
                    }
                }

                if (lastSettingsDate < DateTime.MaxValue)
                {
                    var settings = GetSettingsUpdate(Culture, lastSettingsDate);
                    if (settings != null)
                    {
                        result.Add(new Identifier()
                        {
                            Key = settings
                        });
                    }
                }

                return(result.ToArray());
            }
            catch (Exception ex) { ServerException.Report(ex); }
            return(null);
        }