/// <summary>
        /// Data Collector or devices add new trace. Traces can't update.
        /// </summary>
        public GXTraceAddResponse Post(GXTraceAddRequest request)
        {
            List <GXEventsItem> events = new List <GXEventsItem>();

            lock (Db)
            {
                foreach (GXAmiTrace it in request.Traces)
                {
                    //If DC is adding trace.
                    if (it.DeviceId == 0)
                    {
                        IAuthSession s = this.GetSession(false);
                        Guid         guid;
                        if (!GuruxAMI.Server.GXBasicAuthProvider.IsGuid(s.Id, out guid))
                        {
                            throw new ArgumentException("Access denied.");
                        }
                        List <GXAmiDataCollector> list = Db.Select <GXAmiDataCollector>(q => q.Guid == guid);
                        if (list.Count != 1)
                        {
                            throw new ArgumentException("Access denied.");
                        }
                        it.DataCollectorId   = list[0].Id;
                        it.DataCollectorGuid = guid;
                    }
                    it.Timestamp = DateTime.Now;
                    Db.Insert(it);
#if !SS4
                    it.Id = (ulong)Db.GetLastInsertId();
#else
                    it.Id = (ulong)Db.LastInsertId();
#endif
                    it.DataType = it.Data.GetType().FullName;
                    string data;
                    if (it.Data is byte[])
                    {
                        data = BitConverter.ToString(it.Data as byte[]);
                    }
                    else
                    {
                        data = it.Data.ToString();
                    }
                    string[] tmp   = SplitByLength(data, 255);
                    int      index = 0;
                    //If there is only one row set index to 0, otherwice start index from One.
                    if (tmp.Length == 1)
                    {
                        index = -1;
                    }
                    foreach (string str in tmp)
                    {
                        GXAmiTraceData d = new GXAmiTraceData();
                        d.Index   = ++index;
                        d.TraceId = it.Id;
                        d.Data    = str;
                        Db.Insert(d);
                    }
                    events.Add(new GXEventsItem(ActionTargets.Trace, Actions.Add, it));
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, 0, events);
            return(new GXTraceAddResponse());
        }
        /// <summary>
        /// Data Collector or devices add new trace. Traces can't update.
        /// </summary>
        public GXTraceAddResponse Post(GXTraceAddRequest request)
        {
            List<GXEventsItem> events = new List<GXEventsItem>();
            lock (Db)
            {
                foreach (GXAmiTrace it in request.Traces)
                {
                    //If DC is adding trace.
                    if (it.DeviceId == 0)
                    {
                        IAuthSession s = this.GetSession(false);
                        Guid guid;
                        if (!GuruxAMI.Server.GXBasicAuthProvider.IsGuid(s.Id, out guid))
                        {
                            throw new ArgumentException("Access denied.");
                        }
                        List<GXAmiDataCollector> list = Db.Select<GXAmiDataCollector>(q => q.Guid == guid);
                        if (list.Count != 1)
                        {
                            throw new ArgumentException("Access denied.");
                        }
                        it.DataCollectorId = list[0].Id;
                        it.DataCollectorGuid = guid;
                    }
                    it.Timestamp = DateTime.Now;
                    Db.Insert(it);
#if !SS4
                    it.Id = (ulong)Db.GetLastInsertId();
#else
                    it.Id = (ulong)Db.LastInsertId();
#endif                    
                    it.DataType = it.Data.GetType().FullName;
                    string data;
                    if (it.Data is byte[])
                    {
                        data = BitConverter.ToString(it.Data as byte[]);
                    }
                    else
                    {
                        data = it.Data.ToString();
                    }
                    string[] tmp = SplitByLength(data, 255);
                    int index = 0;
                    //If there is only one row set index to 0, otherwice start index from One.
                    if (tmp.Length == 1)
                    {
                        index = -1;
                    }
                    foreach (string str in tmp)
                    {
                        GXAmiTraceData d = new GXAmiTraceData();
                        d.Index = ++index;
                        d.TraceId = it.Id;
                        d.Data = str;
                        Db.Insert(d);
                    }
                    events.Add(new GXEventsItem(ActionTargets.Trace, Actions.Add, it));
                }
            }
            AppHost host = this.ResolveService<AppHost>();
            host.SetEvents(Db, this.Request, 0, events);
            return new GXTraceAddResponse();
        }