/// <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); } } }
/// <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); } } }
/// <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); } }
/// <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); } }