Ejemplo n.º 1
0
 private Core.DB.Sessions GetSessionItem(string id)
 {
     Core.DB.Sessions item = null;
     if (_cache.TryGetValue(id, out item) && !item.IsDeleted)
     {
         return(item);
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Создание пустой записи о новой сессии в хранилище сессий.
        /// </summary>
        public override void CreateUninitializedItem(HttpContext context, string id, int timeout)
        {
            var session = new Core.DB.Sessions
            {
                SessionId   = id,
                IdUser      = 0,
                Created     = DateTime.UtcNow,
                Expires     = DateTime.UtcNow.AddMinutes(timeout),
                LockDate    = DateTime.UtcNow,
                Locked      = false,
                ItemContent = null,
                LockId      = 0,
            };

            _cache[id] = session;
            SaveChanges();
        }
Ejemplo n.º 3
0
        private void SaveChanges()
        {
            lock (_saveTaskSyncRoot)
            {
                if (_saveTask == null)
                {
                    _saveTask = Task.Delay(_timeoutSave).ContinueWith(t =>
                    {
                        //lock (SyncRootSave)
                        {
                            try
                            {
                                _cache.ToList().ForEach(p =>
                                {
                                    lock (p.Value.SyncRoot)
                                    {
                                        if (p.Value.DateLastChanged > p.Value.DateLastSaved)
                                        {
                                            var entityState = _dbContext.GetState(p.Value);
                                            if (!p.Value.IsDeleted)
                                            {
                                                if (entityState == ItemState.Detached)
                                                {
                                                    _dbContext.Sessions.AddOrUpdate(p.Value);
                                                    p.Value.DateLastSaved = DateTime.Now;
                                                }
                                            }
                                            else if (p.Value.IsDeleted)
                                            {
                                                if (entityState != ItemState.Detached)
                                                {
                                                    _dbContext.DeleteEntity(p.Value);

                                                    Core.DB.Sessions item = null;
                                                    _cache.TryRemove(p.Key, out item);
                                                }
                                            }
                                        }
                                    }
                                });

                                _dbContext.SaveChanges();
                            }
                            catch (UpdateConcurrencyException ex)
                            {
                                Debug.WriteLine("SessionStateProvider: Update error2: {0}", ex.Message);
                                foreach (var entry in ex.Entries)
                                {
                                    Core.DB.Sessions item = entry.Entity as Core.DB.Sessions;
                                    _dbContext.Sessions.Delete(entry.Entity as Core.DB.Sessions);
                                    _cache.TryRemove(item.SessionId, out item);
                                }
                            }
                            catch (Exception ex)
                            {
                                Debug.WriteLine("SessionStateProvider: Update error: {0}", ex.Message);
                            }
                            finally
                            {
                                lock (_saveTaskSyncRoot) _saveTask = null;
                            }
                        }
                    });
                }
            }
        }