private static void SaveSessionStateStoreData(HttpContext context, IMongoRepository repository, string id, SessionStateStoreData sessionStateStoreData, TimeSpan sessionTimeout) { if (IsDebugEnabled) { log.Debug("세션 정보를 캐시에 저장합니다... id=[{0}], sessionTimeout=[{1}]", id, sessionTimeout); } With.TryAction(() => RemoveExpires(repository)); try { byte[] cacheItem = null; // NOTE: SessionStateItemCollection 자체적으로 제공하는 Serialize/Deserialize를 사용해야 합니다. // SessionStateItemCollection 은 SerializableAttribte 가 정의되어 있지 않아 일반적인 방식으로는 직렬화를 수행할 수 없습니다. // if (sessionStateStoreData != null && sessionStateStoreData.Items != null) { cacheItem = WebTool.SerializeSessionState((SessionStateItemCollection)sessionStateStoreData.Items); } var result = repository.Save(new MongoSessionStateEntry(id, cacheItem, DateTime.UtcNow.Add(sessionTimeout))); if (IsDebugEnabled) { log.Debug("세션 정보를 캐시에 저장했습니다!!! id=[{0}], 저장결과=[{1}], sessionTimeout=[{2}]", id, result.Ok, sessionTimeout); } } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error("캐시에 세션 정보를 저장하는데 실패했습니다. id=[{0}]", id); log.Error(ex); } } }
private void SaveSessionStateStoreData(HttpContext context, string id, SessionStateStoreData sessionStateStoreData, TimeSpan sessionTimeout) { if (IsDebugEnabled) { log.Debug("세션 정보를 캐시에 저장합니다... id=[{0}], sessionTimeout=[{1}]", id, sessionTimeout); } try { byte[] cacheItem = null; // NOTE: SessionStateItemCollection 자체적으로 제공하는 SerializeSessionState/Deserialize를 사용해야 합니다. // NOTE: SessionStateItemCollection 은 SerializableAttribte 가 정의되어 있지 않아 일반적인 방식으로는 직렬화를 수행할 수 없습니다. // if (sessionStateStoreData != null && sessionStateStoreData.Items != null) { cacheItem = WebTool.SerializeSessionState((SessionStateItemCollection)sessionStateStoreData.Items); } CacheRepository.Set(id, cacheItem ?? new byte[0], sessionTimeout); if (IsDebugEnabled) { log.Debug("세션 정보를 캐시에 저장했습니다!!! id=[{0}], sessionTimeout=[{1}]", id, sessionTimeout); } } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error("캐시에 세션 정보를 저장하는데 실패했습니다. id=[{0}]", id); log.Error(ex); } } }