Пример #1
0
        /// <summary>
        /// Page의 ViewState 정보를 특정 저장소에 저장하고, 저장 토큰 값을 <see cref="AbstractServerPageStatePersister.StateValue"/>에 저장합니다.
        /// </summary>
        protected override void SaveToRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("Page 상태정보를 저장합니다...");
            }

            RemoveExpires(Expiration);

            var pageState = new Pair(ViewState, ControlState);

            if (StateValue.IsWhiteSpace())
            {
                StateValue = Guid.NewGuid().ToString();
            }

            var stateEntity = (PageStateEntity)PageStateTool.CreateStateEntity(StateValue, pageState, Compressor, CompressThreshold);

            using (var repository = CreateRepository()) {
                var query   = Query.EQ(MongoTool.IdString, stateEntity.Id);
                var updated = Update.Set("Value", stateEntity.Value).Set("IsCompressed", stateEntity.IsCompressed).Set("CreatedDate",
                                                                                                                       stateEntity.
                                                                                                                       CreatedDate);

                // UPSERT
                var result = repository.FindAndModify(query, SortBy.Null, updated, true, true);

                if (IsDebugEnabled)
                {
                    log.Debug("캐시에 Page 상태정보를 저장했습니다!!! StateValue=[{0}], Expiration=[{1}] (min), Result=[{2}]", StateValue, Expiration,
                              result.Ok);
                }
            }
        }
        protected override void LoadFromRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("저장된 Page 상태정보를 저장소에서 로드합니다.. StateValue=[{0}]", StateValue);
            }

            if (StateValue.IsWhiteSpace())
            {
                return;
            }

            var stateEntity = Serializer.Deserialize(StateValue.Base64Decode()) as IPageStateEntity;

            object pageState;

            if (PageStateTool.TryParseStateEntity(stateEntity, Compressor, out pageState))
            {
                if (pageState is Pair)
                {
                    ViewState    = ((Pair)pageState).First;
                    ControlState = ((Pair)pageState).Second;

                    if (IsDebugEnabled)
                    {
                        log.Debug("압축된 Hidden Field의 값을 읽어와서 Page의 상태정보로 설정했습니다!!!");
                    }
                }
            }
        }
        /// <summary>
        /// ViewState 저장소로부터 저장된 ViewState 정보를 가져옵니다.
        /// </summary>
        protected override void LoadFromRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("캐시에서 키[{0}]에 해당하는 페이지 상태정보를 로드합니다...", StateValue);
            }

            if (StateValue.IsWhiteSpace())
            {
                return;
            }

            var cacheKey = GetCacheKey();

            Pair pair = CacheRepository.Get(cacheKey) as Pair;

            if (pair != null)
            {
                ViewState    = pair.First;
                ControlState = pair.Second;

                if (IsDebugEnabled)
                {
                    log.Debug("Page 상태정보를 저장소로부터 로드했습니다. StateValue=[{0}], CacheKey=[{1}]", StateValue, cacheKey);
                }
            }
            else
            {
                if (log.IsWarnEnabled)
                {
                    log.Warn("Page 상태정보를 저장소로부터 로드했지만, NULL 값입니다!!! StateValue=[{0}]", StateValue);
                }
            }
        }
Пример #4
0
        /// <summary>
        /// ViewState 저장소로부터 저장된 ViewState 정보를 가져옵니다.
        /// </summary>
        protected override void LoadFromRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("캐시에서 키에 해당하는 상태정보 로드를 시작합니다... StateValue=[{0}]", StateValue);
            }

            if (StateValue.IsWhiteSpace())
            {
                return;
            }

            var cacheKey    = GetCacheKey();
            var stateEntity = _repository.Get(cacheKey) as IPageStateEntity;

            if (stateEntity != null)
            {
                if (IsDebugEnabled)
                {
                    log.Debug("캐시에 저장된 정보를 로드했습니다...");
                }

                object pageState;

                if (PageStateTool.TryParseStateEntity(stateEntity, Compressor, out pageState))
                {
                    if (pageState != null && pageState is Pair)
                    {
                        ViewState    = ((Pair)pageState).First;
                        ControlState = ((Pair)pageState).Second;

                        if (IsDebugEnabled)
                        {
                            log.Debug("캐시에 저장된 상태정보를 로드하여, Page의 ViewState, ControlState에 설정했습니다.");
                        }
                    }
                }
            }
            else
            {
                if (IsDebugEnabled)
                {
                    log.Debug("캐시에 지정된 키에 해당하는 상태정보가 저장되어 있지 않습니다. StateValue=[{0}]", StateValue);
                }
            }
        }
        /// <summary>
        /// ViewState 저장소로부터 저장된 ViewState 정보를 가져옵니다.
        /// </summary>
        protected override void LoadFromRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("세션에 저장된 상태정보를 Repository에서 로드합니다... StateValue=[{0}]", StateValue);
            }

            ThrowIfSessionStateModeIsOff(Page.Session.Mode);

            // 저장 조회용 키값이 없으므로, 저장하지 않았다는 뜻
            if (StateValue.IsWhiteSpace())
            {
                return;
            }

            var cacheKey    = GetCacheKey();
            var stateEntity = Page.Session[cacheKey] as IPageStateEntity;

            if (stateEntity == null)
            {
                return;
            }

            object pageState;

            if (PageStateTool.TryParseStateEntity(stateEntity, Compressor, out pageState))
            {
                if (pageState != null && pageState is Pair)
                {
                    ViewState    = ((Pair)pageState).First;
                    ControlState = ((Pair)pageState).Second;

                    if (IsDebugEnabled)
                    {
                        log.Debug("세션에 저장된 상태정보를 로드하여, Page의 ViewState, ControlState에 설정했습니다!!! StateValue=[{0}]", StateValue);
                    }
                }
            }
            else
            {
                if (IsDebugEnabled)
                {
                    log.Debug("세션에 해당하는 키의 상태정보가 저장되어 있지 않습니다!!!, StaetKeyValue=[{0}]", StateValue);
                }
            }
        }
Пример #6
0
        /// <summary>
        /// ViewState 저장소로부터 저장된 ViewState 정보를 가져옵니다.
        /// </summary>
        protected override void LoadFromRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("저장소에서 키에 해당하는 상태정보 로드를 시작합니다... StateValue=[{0}]", StateValue);
            }

            if (StateValue.IsWhiteSpace())
            {
                return;
            }

            RemoveExpires(Expiration);

            using (var repository = CreateRepository()) {
                var stateEntity = repository.FindOneByIdAs <PageStateEntity>(StateValue);

                if (stateEntity != null)
                {
                    object pageState;

                    if (PageStateTool.TryParseStateEntity(stateEntity, Compressor, out pageState))
                    {
                        ViewState    = ((Pair)pageState).First;
                        ControlState = ((Pair)pageState).Second;

                        if (IsDebugEnabled)
                        {
                            log.Debug("저장된 상태정보를 로드하여, Page의 ViewState, ControlState에 설정했습니다!!!");
                        }
                    }
                    else
                    {
                        throw new InvalidOperationException("저장된 정보를 로드하였지만, ViewState로 Parsing하는데 실패했습니다.");
                    }
                }
                else
                {
                    if (IsDebugEnabled)
                    {
                        log.Debug("상태정보를 조회하지 못했습니다. StateValue=[{0}]", StateValue);
                    }
                }
            }
        }
        /// <summary>
        /// Page의 ViewState 정보를 특정 저장소에 저장하고, 저장 토큰 값을 <see cref="AbstractServerPageStatePersister.StateValue"/>에 저장합니다.
        /// </summary>
        protected override void SaveToRepository()
        {
            if (StateValue.IsWhiteSpace())
            {
                StateValue = CreateStateValue();
            }

            if (IsDebugEnabled)
            {
                log.Debug("캐시에 Page 상태정보를 저장합니다... StateValue=" + StateValue);
            }

            CacheRepository.Set(GetCacheKey(), new Pair(ViewState, ControlState), Expiration);

            if (IsDebugEnabled)
            {
                log.Debug("캐시에 Page 상태정보를 저장했습니다!!! StateValue=[{0}], Expiration=[{1}] (min)", StateValue, Expiration);
            }
        }
Пример #8
0
        /// <summary>
        /// Page의 ViewState 정보를 특정 저장소에 저장하고, 저장 토큰 값을 <see cref="AbstractServerPageStatePersister.StateValue"/>에 저장합니다.
        /// </summary>
        protected override void SaveToRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("Page 상태정보를 Repository에 저장합니다...");
            }

            if (StateValue.IsWhiteSpace())
            {
                StateValue = CreateStateValue();
            }

            var pageState   = new Pair(ViewState, ControlState);
            var stateEntity = PageStateTool.CreateStateEntity(StateValue, pageState, Compressor, CompressThreshold);

            _repository.Set(GetCacheKey(), stateEntity, Expiration);

            if (IsDebugEnabled)
            {
                log.Debug("Page 상태정보를 저장하였습니다!!! StateValue=[{0}]", StateValue);
            }
        }
        /// <summary>
        /// 저장된 Page의 ViewState 정보를 Load합니다. Load 후에는 저장소에서 삭제하셔야 합니다. ViewState는 매 요청시마다 다른 토큰으로 저장되기 때문입니다.
        /// </summary>
        public override void Load()
        {
            if (IsDebugEnabled)
            {
                log.Debug("Page의 ViewState 정보를 저장소에서 로드합니다... ");
            }

            try {
                StateValue = RetrieveHiddenFieldFromScriptManager();

                if (StateValue.IsWhiteSpace())
                {
                    StateValue = RetrieveHiddenFieldFromPage();
                }

                if (StateValue.IsWhiteSpace())
                {
                    if (IsDebugEnabled)
                    {
                        log.Debug("저장 토큰 키가 없으므로, 상태정보를 로드 작업을 중단합니다!!!");
                    }

                    return;
                }

                // ViewState 정보를 저장소에서 로드하여 Page의 ViewState에 설정합니다.
                LoadFromRepository();
            }
            catch (Exception ex) {
                if (log.IsErrorEnabled)
                {
                    log.Error("ViewState를 로드하는데 실패했습니다!!! StateValue=[{0}]", StateValue);
                    log.Error(ex);
                }
                throw;
            }
        }
        /// <summary>
        /// Page의 ViewState 정보를 특정 저장소에 저장하고, 저장 토큰 값을 <see cref="AbstractServerPageStatePersister.StateValue"/>에 저장합니다.
        /// </summary>
        protected override void SaveToRepository()
        {
            if (IsDebugEnabled)
            {
                log.Debug("상태정보를 Session에 저장하려고 합니다...");
            }

            ThrowIfSessionStateModeIsOff(Page.Session.Mode);

            if (StateValue.IsWhiteSpace())
            {
                StateValue = CreateStateValue();
            }

            var pair        = new Pair(ViewState, ControlState);
            var stateEntity = PageStateTool.CreateStateEntity(StateValue, pair, Compressor, CompressThreshold);

            Page.Session[GetCacheKey()] = stateEntity;

            if (IsDebugEnabled)
            {
                log.Debug("세션에 상태정보를 저장했습니다!!! StateValue=[{0}]", StateValue);
            }
        }