Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / UI / DataSourceCache.cs / 1 / DataSourceCache.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI { using System.ComponentModel; using System.Web.Caching; using System.Web.Util; internal class DataSourceCache : IStateManager { public const int Infinite = 0; private bool _tracking; private StateBag _viewState; ////// The duration, in seconds, of the expiration. The expiration policy is specified by the ExpirationPolicy property. /// public virtual int Duration { get { object o = ViewState["Duration"]; if (o != null) return (int)o; return Infinite; } set { if (value < 0) { throw new ArgumentOutOfRangeException("value", SR.GetString(SR.DataSourceCache_InvalidDuration)); } ViewState["Duration"] = value; } } ////// Whether caching is enabled for this data source. /// public virtual bool Enabled { get { object o = ViewState["Enabled"]; if (o != null) return (bool)o; return false; } set { ViewState["Enabled"] = value; } } ////// The expiration policy of the cache. The duration for the expiration is specified by the Duration property. /// public virtual DataSourceCacheExpiry ExpirationPolicy { get { object o = ViewState["ExpirationPolicy"]; if (o != null) return (DataSourceCacheExpiry)o; return DataSourceCacheExpiry.Absolute; } set { if (value < DataSourceCacheExpiry.Absolute || value > DataSourceCacheExpiry.Sliding) { throw new ArgumentOutOfRangeException(SR.GetString(SR.DataSourceCache_InvalidExpiryPolicy)); } ViewState["ExpirationPolicy"] = value; } } ////// Indicates an arbitrary cache key to make this cache entry depend on. This allows /// the user to further customize when this cache entry will expire. /// [ DefaultValue(""), NotifyParentProperty(true), WebSysDescription(SR.DataSourceCache_KeyDependency), ] public virtual string KeyDependency { get { object o = ViewState["KeyDependency"]; if (o != null) return (string)o; return String.Empty; } set { ViewState["KeyDependency"] = value; } } ////// Indicates a dictionary of state information that allows you to save and restore /// the state of an object across multiple requests for the same page. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] protected StateBag ViewState { get { if (_viewState == null) { _viewState = new StateBag(); if (_tracking) _viewState.TrackViewState(); } return _viewState; } } ////// Invalidates an ASP.NET cache entry using the specified key. /// SECURITY: This method should never accept user-defined inputs /// because it invalidates the internal ASP.net cache. /// public void Invalidate(string key) { if (String.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } Debug.Assert(key.StartsWith(CacheInternal.PrefixDataSourceControl, StringComparison.Ordinal), "All keys passed in should start with the prefix specified in CacheInternal.PrefixDataSourceControl."); if (!Enabled) { throw new InvalidOperationException(SR.GetString(SR.DataSourceCache_CacheMustBeEnabled)); } HttpRuntime.CacheInternal.Remove(key); } ////// Loads data from the ASP.NET cache using the specified key. /// public object LoadDataFromCache(string key) { if (String.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } Debug.Assert(key.StartsWith(CacheInternal.PrefixDataSourceControl, StringComparison.Ordinal), "All keys passed in should start with the prefix specified in CacheInternal.PrefixDataSourceControl."); if (!Enabled) { throw new InvalidOperationException(SR.GetString(SR.DataSourceCache_CacheMustBeEnabled)); } return HttpRuntime.CacheInternal.Get(key); } ////// Loads the state of the DataSourceCache object. /// protected virtual void LoadViewState(object savedState) { if (savedState != null) { ((IStateManager)ViewState).LoadViewState(savedState); } } ////// Saves data to the ASP.NET cache using the specified key. /// public void SaveDataToCache(string key, object data) { SaveDataToCache(key, data, null); } ////// Saves data to the ASP.NET cache using the specified key and makes /// this entry dependent on the specified dependency. /// public void SaveDataToCache(string key, object data, CacheDependency dependency) { SaveDataToCacheInternal(key, data, dependency); } ////// Saves data to the ASP.NET cache using the specified key, and makes /// it dependent on the specified CacheDependency object. /// Override this method if you need to create your own cache dependencies /// and call this base implementation to actually save the data to the /// cache with the standard properties (expiration policy, duration, etc.). /// protected virtual void SaveDataToCacheInternal(string key, object data, CacheDependency dependency) { if (String.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } Debug.Assert(key.StartsWith(CacheInternal.PrefixDataSourceControl, StringComparison.Ordinal), "All keys passed in should start with the prefix specified in CacheInternal.PrefixDataSourceControl."); if (!Enabled) { throw new InvalidOperationException(SR.GetString(SR.DataSourceCache_CacheMustBeEnabled)); } DateTime utcAbsoluteExpiryTime = Cache.NoAbsoluteExpiration; TimeSpan slidingExpiryTimeSpan = Cache.NoSlidingExpiration; switch (ExpirationPolicy) { case DataSourceCacheExpiry.Absolute: // The caching APIs for absolute expiry expect a duration of 0 to mean no expiry, // but for us it means infinite so we use Int32.MaxValue instead. utcAbsoluteExpiryTime = DateTime.UtcNow.AddSeconds(Duration == 0 ? Int32.MaxValue : Duration); break; case DataSourceCacheExpiry.Sliding: slidingExpiryTimeSpan = TimeSpan.FromSeconds(Duration); break; } AggregateCacheDependency aggregateCacheDependency = new AggregateCacheDependency(); // Set up key dependency, if any string[] keyDependencies = null; if (KeyDependency.Length > 0) { keyDependencies = new string[] { KeyDependency }; aggregateCacheDependency.Add(new CacheDependency[] { new CacheDependency(null, keyDependencies) }); } // If there are any additional dependencies, create a new CacheDependency for them if (dependency != null) { aggregateCacheDependency.Add(new CacheDependency[] { dependency }); } HttpRuntime.CacheInternal.UtcInsert(key, data, aggregateCacheDependency, utcAbsoluteExpiryTime, slidingExpiryTimeSpan); } ////// Saves the current state of the DataSourceCache object. /// protected virtual object SaveViewState() { return (_viewState != null ? ((IStateManager)_viewState).SaveViewState() : null); } ////// Starts tracking view state. /// protected void TrackViewState() { _tracking = true; if (_viewState != null) { _viewState.TrackViewState(); } } #region IStateManager implementation ///bool IStateManager.IsTrackingViewState { get { return _tracking; } } /// void IStateManager.LoadViewState(object savedState) { LoadViewState(savedState); } /// object IStateManager.SaveViewState() { return SaveViewState(); } /// void IStateManager.TrackViewState() { TrackViewState(); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI { using System.ComponentModel; using System.Web.Caching; using System.Web.Util; internal class DataSourceCache : IStateManager { public const int Infinite = 0; private bool _tracking; private StateBag _viewState; ////// The duration, in seconds, of the expiration. The expiration policy is specified by the ExpirationPolicy property. /// public virtual int Duration { get { object o = ViewState["Duration"]; if (o != null) return (int)o; return Infinite; } set { if (value < 0) { throw new ArgumentOutOfRangeException("value", SR.GetString(SR.DataSourceCache_InvalidDuration)); } ViewState["Duration"] = value; } } ////// Whether caching is enabled for this data source. /// public virtual bool Enabled { get { object o = ViewState["Enabled"]; if (o != null) return (bool)o; return false; } set { ViewState["Enabled"] = value; } } ////// The expiration policy of the cache. The duration for the expiration is specified by the Duration property. /// public virtual DataSourceCacheExpiry ExpirationPolicy { get { object o = ViewState["ExpirationPolicy"]; if (o != null) return (DataSourceCacheExpiry)o; return DataSourceCacheExpiry.Absolute; } set { if (value < DataSourceCacheExpiry.Absolute || value > DataSourceCacheExpiry.Sliding) { throw new ArgumentOutOfRangeException(SR.GetString(SR.DataSourceCache_InvalidExpiryPolicy)); } ViewState["ExpirationPolicy"] = value; } } ////// Indicates an arbitrary cache key to make this cache entry depend on. This allows /// the user to further customize when this cache entry will expire. /// [ DefaultValue(""), NotifyParentProperty(true), WebSysDescription(SR.DataSourceCache_KeyDependency), ] public virtual string KeyDependency { get { object o = ViewState["KeyDependency"]; if (o != null) return (string)o; return String.Empty; } set { ViewState["KeyDependency"] = value; } } ////// Indicates a dictionary of state information that allows you to save and restore /// the state of an object across multiple requests for the same page. /// [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] protected StateBag ViewState { get { if (_viewState == null) { _viewState = new StateBag(); if (_tracking) _viewState.TrackViewState(); } return _viewState; } } ////// Invalidates an ASP.NET cache entry using the specified key. /// SECURITY: This method should never accept user-defined inputs /// because it invalidates the internal ASP.net cache. /// public void Invalidate(string key) { if (String.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } Debug.Assert(key.StartsWith(CacheInternal.PrefixDataSourceControl, StringComparison.Ordinal), "All keys passed in should start with the prefix specified in CacheInternal.PrefixDataSourceControl."); if (!Enabled) { throw new InvalidOperationException(SR.GetString(SR.DataSourceCache_CacheMustBeEnabled)); } HttpRuntime.CacheInternal.Remove(key); } ////// Loads data from the ASP.NET cache using the specified key. /// public object LoadDataFromCache(string key) { if (String.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } Debug.Assert(key.StartsWith(CacheInternal.PrefixDataSourceControl, StringComparison.Ordinal), "All keys passed in should start with the prefix specified in CacheInternal.PrefixDataSourceControl."); if (!Enabled) { throw new InvalidOperationException(SR.GetString(SR.DataSourceCache_CacheMustBeEnabled)); } return HttpRuntime.CacheInternal.Get(key); } ////// Loads the state of the DataSourceCache object. /// protected virtual void LoadViewState(object savedState) { if (savedState != null) { ((IStateManager)ViewState).LoadViewState(savedState); } } ////// Saves data to the ASP.NET cache using the specified key. /// public void SaveDataToCache(string key, object data) { SaveDataToCache(key, data, null); } ////// Saves data to the ASP.NET cache using the specified key and makes /// this entry dependent on the specified dependency. /// public void SaveDataToCache(string key, object data, CacheDependency dependency) { SaveDataToCacheInternal(key, data, dependency); } ////// Saves data to the ASP.NET cache using the specified key, and makes /// it dependent on the specified CacheDependency object. /// Override this method if you need to create your own cache dependencies /// and call this base implementation to actually save the data to the /// cache with the standard properties (expiration policy, duration, etc.). /// protected virtual void SaveDataToCacheInternal(string key, object data, CacheDependency dependency) { if (String.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } Debug.Assert(key.StartsWith(CacheInternal.PrefixDataSourceControl, StringComparison.Ordinal), "All keys passed in should start with the prefix specified in CacheInternal.PrefixDataSourceControl."); if (!Enabled) { throw new InvalidOperationException(SR.GetString(SR.DataSourceCache_CacheMustBeEnabled)); } DateTime utcAbsoluteExpiryTime = Cache.NoAbsoluteExpiration; TimeSpan slidingExpiryTimeSpan = Cache.NoSlidingExpiration; switch (ExpirationPolicy) { case DataSourceCacheExpiry.Absolute: // The caching APIs for absolute expiry expect a duration of 0 to mean no expiry, // but for us it means infinite so we use Int32.MaxValue instead. utcAbsoluteExpiryTime = DateTime.UtcNow.AddSeconds(Duration == 0 ? Int32.MaxValue : Duration); break; case DataSourceCacheExpiry.Sliding: slidingExpiryTimeSpan = TimeSpan.FromSeconds(Duration); break; } AggregateCacheDependency aggregateCacheDependency = new AggregateCacheDependency(); // Set up key dependency, if any string[] keyDependencies = null; if (KeyDependency.Length > 0) { keyDependencies = new string[] { KeyDependency }; aggregateCacheDependency.Add(new CacheDependency[] { new CacheDependency(null, keyDependencies) }); } // If there are any additional dependencies, create a new CacheDependency for them if (dependency != null) { aggregateCacheDependency.Add(new CacheDependency[] { dependency }); } HttpRuntime.CacheInternal.UtcInsert(key, data, aggregateCacheDependency, utcAbsoluteExpiryTime, slidingExpiryTimeSpan); } ////// Saves the current state of the DataSourceCache object. /// protected virtual object SaveViewState() { return (_viewState != null ? ((IStateManager)_viewState).SaveViewState() : null); } ////// Starts tracking view state. /// protected void TrackViewState() { _tracking = true; if (_viewState != null) { _viewState.TrackViewState(); } } #region IStateManager implementation ///bool IStateManager.IsTrackingViewState { get { return _tracking; } } /// void IStateManager.LoadViewState(object savedState) { LoadViewState(savedState); } /// object IStateManager.SaveViewState() { return SaveViewState(); } /// void IStateManager.TrackViewState() { TrackViewState(); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WindowsListBox.cs
- wgx_exports.cs
- WorkflowService.cs
- RegexWorker.cs
- SizeAnimationBase.cs
- TextContainerChangeEventArgs.cs
- ApplyHostConfigurationBehavior.cs
- WindowsTooltip.cs
- DetailsViewPagerRow.cs
- UIElement.cs
- UserInitiatedNavigationPermission.cs
- CheckableControlBaseAdapter.cs
- RotateTransform.cs
- ExpressionBindingCollection.cs
- VariableAction.cs
- ClientSession.cs
- BinaryUtilClasses.cs
- PreviewPrintController.cs
- CompiledIdentityConstraint.cs
- Pen.cs
- ItemList.cs
- HostingEnvironmentSection.cs
- ProtocolsConfigurationEntry.cs
- LinqDataSourceDeleteEventArgs.cs
- ButtonBaseAdapter.cs
- RepeaterItemCollection.cs
- DataGridBoundColumn.cs
- UnsafeNativeMethods.cs
- KnownTypeHelper.cs
- SecuritySessionServerSettings.cs
- XPathConvert.cs
- RoleService.cs
- SplitContainer.cs
- HtmlPhoneCallAdapter.cs
- DateTime.cs
- DoubleCollectionConverter.cs
- SuppressMessageAttribute.cs
- XPathNodeHelper.cs
- ActivityExecutorOperation.cs
- IPHostEntry.cs
- Propagator.ExtentPlaceholderCreator.cs
- XhtmlBasicLiteralTextAdapter.cs
- DateTimeValueSerializerContext.cs
- PeerUnsafeNativeMethods.cs
- SiteMapNode.cs
- OracleNumber.cs
- ScriptReference.cs
- StringDictionary.cs
- ColorContext.cs
- GeneralTransform3DTo2D.cs
- GeneralTransform2DTo3D.cs
- StylusCollection.cs
- CTreeGenerator.cs
- NetworkInterface.cs
- CaretElement.cs
- DeclarativeCatalogPart.cs
- OledbConnectionStringbuilder.cs
- HMACSHA256.cs
- ProxyHwnd.cs
- SingleAnimation.cs
- ListControlConvertEventArgs.cs
- VirtualDirectoryMapping.cs
- UriTemplateQueryValue.cs
- XmlArrayItemAttribute.cs
- ADConnectionHelper.cs
- XhtmlTextWriter.cs
- FormViewInsertedEventArgs.cs
- RepeaterCommandEventArgs.cs
- OleStrCAMarshaler.cs
- LinqMaximalSubtreeNominator.cs
- OverrideMode.cs
- FtpWebResponse.cs
- ProtocolViolationException.cs
- HtmlGenericControl.cs
- XmlILOptimizerVisitor.cs
- ICspAsymmetricAlgorithm.cs
- AnnotationService.cs
- XmlSchemaChoice.cs
- ToolboxService.cs
- WebSysDisplayNameAttribute.cs
- QueueProcessor.cs
- tabpagecollectioneditor.cs
- NavigationExpr.cs
- MobileContainerDesigner.cs
- BinaryUtilClasses.cs
- TextBoxDesigner.cs
- HierarchicalDataBoundControl.cs
- XmlDictionaryWriter.cs
- CommonDialog.cs
- SqlOuterApplyReducer.cs
- SudsWriter.cs
- HeaderedItemsControl.cs
- XmlSerializableWriter.cs
- BufferedGraphicsContext.cs
- ToolStripItem.cs
- MonitorWrapper.cs
- SqlGatherConsumedAliases.cs
- RelatedView.cs
- HtmlTableRow.cs
- ConnectionStringsSection.cs