Beispiel #1
0
        public override void CreateUninitializedItem(System.Web.HttpContext context, string id,
                                                     int timeout)
        {
            DateTime dSetTime = DateTime.Now;

            if (this._bIsDbNone == false)
            {
                #region Setting it in Db
                using (IDbOperations objDb = DbFactory.CreateDbOperations(_strDbType, _strConn))
                {
                    objDb.Add(id, ApplicationName, dSetTime,
                              dSetTime.AddMinutes((double)timeout),
                              dSetTime, 0, timeout, false, null, 1);
                }
                #endregion
            }

            #region Updating item in memcached
            MemcachedHolder objHolder = new MemcachedHolder(
                null, false, dSetTime, 0, 1);

            this._client.Store(StoreMode.Set, id, objHolder, new TimeSpan(0, timeout, 0));

            #endregion
        }
        public override void ReleaseItemExclusive(System.Web.HttpContext context, string id, object lockId)
        {
            counters.IncrementTotalOperPc();

            #region Updating item in memcached
            counters.IncrementMemcachedPc();
            MemcachedHolder objHolder = this._client.Get <MemcachedHolder>(id);

            if (objHolder != null)
            {
                objHolder.Locked = false;
                objHolder.LockId = (int)lockId;
                counters.IncrementMemcachedPc();
                this._client.Store(StoreMode.Set, id, objHolder);
            }
            #endregion

            if (this._bIsDbNone == false)
            {
                #region Updating Database
                counters.IncrementDbPc();
                using (IDbOperations objDb = DbFactory.CreateDbOperations(_strDbType, _strConn))
                {
                    objDb.ReleaseItem(id, ApplicationName, (int)lockId, _objConfig.Timeout.Minutes);
                }
                #endregion
            }
        }
Beispiel #3
0
        public override void SetAndReleaseItemExclusive(System.Web.HttpContext context,
                                                        string id, SessionStateStoreData item, object lockId, bool newItem)
        {
            if (this._bIsDbNone == false)
            {
                #region Db option
                using (IDbOperations objDb = DbFactory.CreateDbOperations(_strDbType, _strConn))
                {
                    byte[]   objContent = null;
                    DateTime dSetTime   = DateTime.Now;

                    objContent = Common.Serialize((SessionStateItemCollection)item.Items);

                    if (newItem == true)
                    {
                        objDb.Add(id, ApplicationName, dSetTime,
                                  dSetTime.AddMinutes((Double)item.Timeout), dSetTime,
                                  0, item.Timeout, false,
                                  objContent, 0);

                        // Setting it up in memcached
                        MemcachedHolder objHolder = new MemcachedHolder(
                            objContent, false, dSetTime, 0, 0);
                        this._client.Store(StoreMode.Set,
                                           id, objHolder, new TimeSpan(0, item.Timeout, 0));
                    }
                    else
                    {
                        objDb.Update(id, ApplicationName, (int)lockId,
                                     dSetTime.AddMinutes((Double)item.Timeout),
                                     objContent, false);

                        // Setting it up in memcached
                        MemcachedHolder objHolder = new MemcachedHolder(
                            objContent, false, dSetTime, 0, 0);

                        this._client.Store(StoreMode.Set,
                                           id, objHolder, new TimeSpan(0, item.Timeout, 0));
                    }
                }
                #endregion
            }
            else // Just memcached version
            {
                byte[]   objContent = null;
                DateTime dSetTime   = DateTime.Now;

                objContent = Common.Serialize((SessionStateItemCollection)item.Items);

                if (newItem == true)
                {
                    // Setting it up in memcached
                    MemcachedHolder objHolder = new MemcachedHolder(
                        objContent, false, dSetTime, 0, 0);
                    this._client.Store(StoreMode.Set,
                                       id, objHolder, new TimeSpan(0, item.Timeout, 0));
                }
                else
                {
                    // Setting it up in memcached
                    MemcachedHolder objHolder = new MemcachedHolder(
                        objContent, false, dSetTime, 0, 0);

                    this._client.Store(StoreMode.Set,
                                       id, objHolder, new TimeSpan(0, item.Timeout, 0));
                }
            }
        }
Beispiel #4
0
        public override SessionStateStoreData GetItemExclusive(System.Web.HttpContext context, string id,
                                                               out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions)
        {
            SessionStateStoreData objItem   = null;
            MemcachedHolder       objHolder = this._client.Get <MemcachedHolder>(id);
            DateTime dSetTime = DateTime.Now;

            #region Initialized
            lockAge = TimeSpan.Zero;
            lockId  = null;
            locked  = false;
            actions = 0;
            #endregion

            if (objHolder != null)
            {
                if (objHolder.Locked == false)
                {
                    #region
                    objHolder.LockId++;
                    objHolder.SetTime = dSetTime;

                    // Locking Item for memcached
                    objHolder.Locked = true;

                    this._client.Store(StoreMode.Set, id, objHolder,
                                       new TimeSpan(0, 0, 0, 0, _objConfig.Timeout.Milliseconds));

                    actions = (SessionStateActions)objHolder.ActionFlag;
                    lockId  = objHolder.LockId;
                    lockAge = objHolder.LockAge;

                    if (this._bIsDbNone == false) // Saving to Db
                    {
                        using (IDbOperations objDb = DbFactory.CreateDbOperations(_strDbType, _strConn))
                        {
                            locked = objDb.LockItemWithoutLockId(id, ApplicationName);
                            objDb.LockItem(id, ApplicationName, objHolder.LockId);
                        }
                    }

                    if (actions == SessionStateActions.InitializeItem)
                    {
                        objItem = Common.CreateNewStoreData(context, _objConfig.Timeout.Minutes);
                    }
                    else
                    {
                        objItem = Common.Deserialize(context, objHolder.Content, _objConfig.Timeout.Minutes);
                    }

                    return(objItem);

                    #endregion
                }
                else
                {
                    lockAge = objHolder.LockAge;
                    locked  = true;
                    lockId  = objHolder.LockId;
                    actions = (SessionStateActions)objHolder.ActionFlag;

                    return(objItem);
                }
            }
            else
            {
                if (this._bIsDbNone == false) // Saving to Db
                {
                    using (IDbOperations objDb = DbFactory.CreateDbOperations(_strDbType, _strConn))
                    {
                        return(objDb.GetItem(id, ApplicationName, _objConfig.Timeout.Minutes,
                                             context, true, out locked, out lockAge, out lockId, out actions));
                    }
                }
                else
                {
                    return(objItem);
                }
            }
        }