Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / Cache / RequestCachePolicy.cs / 1305376 / RequestCachePolicy.cs
/*++ Copyright (c) Microsoft Corporation Module Name: RequestCachePolicy.cs Abstract: The class implements caching policy paradigms that is used by all webrequest cache-aware clients Author: Alexei Vopilov 21-Dec-2002 Revision History: 4 Dec 2003 - Reworked as per design review. 30 Jul 2004 - Updated to accomodate FTP caching feature --*/ namespace System.Net.Cache { using System.Globalization; // The enum describes cache settings applicable for any webrequest public enum RequestCacheLevel { // Default cache behavior determined by the protocol class Default = 0, // Bypass the cache completely BypassCache = 1, // Only serve requests from cache, an exception is thrown if not found CacheOnly = 2, // Serve from the cache, but will [....] up with the server if not found CacheIfAvailable = 3, // Attempt to revalidate cache with the server, reload if unable to Revalidate = 4, // Reload the data from the origin server Reload = 5, // Bypass the cache and removing existing entries in the cache NoCacheNoStore = 6 } // // Common request cache policy used for caching of Http, FTP, etc. // public class RequestCachePolicy { private RequestCacheLevel m_Level; // // Public stuff // public RequestCachePolicy(): this (RequestCacheLevel.Default) { } public RequestCachePolicy(RequestCacheLevel level) { if (level < RequestCacheLevel.Default || level > RequestCacheLevel.NoCacheNoStore) throw new ArgumentOutOfRangeException("level"); m_Level = level; } // public RequestCacheLevel Level { get { return m_Level; } } // public override string ToString() { return "Level:" + m_Level.ToString(); } // // Internal stuff // // #if TRAVE /* // Consider removing. internal static string ToString(RequestCachePolicy Policy) { if (Policy == null) { return "null"; } return Policy.ToString(); } */ #endif } // The enum describes cache settings for http public enum HttpRequestCacheLevel { // Default cache behavior, server fresh response fomr cache, otherwise attempt // to revalidate with the server or reload Default = 0, // Bypass the cache completely BypassCache = 1, // Only serve requests from cache, an exception is thrown if not found CacheOnly = 2, // Serve from the cache, but will [....] up with the server if not found CacheIfAvailable = 3, // Validate cached data with the server even if it looks fresh Revalidate = 4, // Reload the data from the origin server Reload = 5, // Bypass the cache and removing existing entries in the cache NoCacheNoStore = 6, // Serve from cache, or the next cache along the path CacheOrNextCacheOnly= 7, // Reload the data either from the origin server or from an uplevel cache //This is equvalent to Cache-Control:MaxAge=0 HTTP semantic Refresh = 8, } // // CacheAgeControl is used to specify preferences with respect of cached item age and freshness. // public enum HttpCacheAgeControl { // Invalid value. Indicates the enum is not initialized None = 0x0, // Cached item must be at least fresh for specified period since now MinFresh = 0x1, // Cached item must be fresh and it's age must not exceed specified period MaxAge = 0x2, // Cached item may be not fresh but it's expiration must not exceed specified period MaxStale = 0x4, // Cached item must fresh for some period in future and it's age must be less than specified MaxAgeAndMinFresh = 0x3, // MaxAge|MinFresh, // Cached item may be found as stale for some period but it's age must be less than specified MaxAgeAndMaxStale = 0x6, // MaxAge|MaxStale, } // // HTTP cache policy that expresses RFC2616 HTTP caching semantic // public class HttpRequestCachePolicy: RequestCachePolicy { internal static readonly HttpRequestCachePolicy BypassCache = new HttpRequestCachePolicy(HttpRequestCacheLevel.BypassCache); //Private members private HttpRequestCacheLevel m_Level = HttpRequestCacheLevel.Default; private DateTime m_LastSyncDateUtc = DateTime.MinValue; private TimeSpan m_MaxAge = TimeSpan.MaxValue; private TimeSpan m_MinFresh = TimeSpan.MinValue; private TimeSpan m_MaxStale = TimeSpan.MinValue; // // Public stuff // public HttpRequestCachePolicy():this(HttpRequestCacheLevel.Default) { } // public HttpRequestCachePolicy(HttpRequestCacheLevel level): base(MapLevel(level)) { m_Level = level; } // // Creates an automatic cache policy that is bound to a simples age control // public HttpRequestCachePolicy(HttpCacheAgeControl cacheAgeControl, TimeSpan ageOrFreshOrStale):this(HttpRequestCacheLevel.Default) { switch(cacheAgeControl) { case HttpCacheAgeControl.MinFresh: m_MinFresh = ageOrFreshOrStale; break; case HttpCacheAgeControl.MaxAge: m_MaxAge = ageOrFreshOrStale; break; case HttpCacheAgeControl.MaxStale: m_MaxStale = ageOrFreshOrStale; break; default: throw new ArgumentException(SR.GetString(SR.net_invalid_enum, "HttpCacheAgeControl"), "cacheAgeControl"); } } // // Creates an automatic cache policy that is bound to a complex age control // public HttpRequestCachePolicy(HttpCacheAgeControl cacheAgeControl, TimeSpan maxAge, TimeSpan freshOrStale):this(HttpRequestCacheLevel.Default) { switch(cacheAgeControl) { case HttpCacheAgeControl.MinFresh: m_MinFresh = freshOrStale; break; case HttpCacheAgeControl.MaxAge: m_MaxAge = maxAge; break; case HttpCacheAgeControl.MaxStale: m_MaxStale = freshOrStale; break; case HttpCacheAgeControl.MaxAgeAndMinFresh: m_MaxAge = maxAge; m_MinFresh = freshOrStale; break; case HttpCacheAgeControl.MaxAgeAndMaxStale: m_MaxAge = maxAge; m_MaxStale = freshOrStale; break; default: throw new ArgumentException(SR.GetString(SR.net_invalid_enum, "HttpCacheAgeControl"), "cacheAgeControl"); } } // // Creates an automatic cache policy with the Date Synchronization requirement // public HttpRequestCachePolicy(DateTime cacheSyncDate):this(HttpRequestCacheLevel.Default) { m_LastSyncDateUtc = cacheSyncDate.ToUniversalTime(); } // // // public HttpRequestCachePolicy(HttpCacheAgeControl cacheAgeControl, TimeSpan maxAge, TimeSpan freshOrStale, DateTime cacheSyncDate) :this(cacheAgeControl, maxAge, freshOrStale) { m_LastSyncDateUtc = cacheSyncDate.ToUniversalTime(); } // // Properties // public new HttpRequestCacheLevel Level { get { return m_Level; } } // // Requires revalidation of items stored before lastSyncDate // public DateTime CacheSyncDate { get { if (m_LastSyncDateUtc == DateTime.MinValue || m_LastSyncDateUtc == DateTime.MaxValue) { return m_LastSyncDateUtc; } return m_LastSyncDateUtc.ToLocalTime();} } // internal DateTime InternalCacheSyncDateUtc { get {return m_LastSyncDateUtc;} } // // Specifies age policy according to HTTP 1.1 RFC caching semantic // public TimeSpan MaxAge { get {return m_MaxAge;} } // // Specifies age policy according to HTTP 1.1 RFC caching semantic // public TimeSpan MinFresh { get {return m_MinFresh;} } // // Specifies age policy according to HTTP 1.1 RFC caching semantic // public TimeSpan MaxStale { get {return m_MaxStale;} } // // // public override string ToString() { return "Level:" + m_Level.ToString() + (m_MaxAge == TimeSpan.MaxValue? string.Empty: " MaxAge:" + m_MaxAge.ToString()) + (m_MinFresh == TimeSpan.MinValue? string.Empty: " MinFresh:" + m_MinFresh.ToString()) + (m_MaxStale == TimeSpan.MinValue? string.Empty: " MaxStale:" + m_MaxStale.ToString()) + (CacheSyncDate==DateTime.MinValue? string.Empty: " CacheSyncDate:" + CacheSyncDate.ToString(CultureInfo.CurrentCulture)); } // // // private static RequestCacheLevel MapLevel(HttpRequestCacheLevel level) { if (level <= HttpRequestCacheLevel.NoCacheNoStore) return (RequestCacheLevel) level; if (level == HttpRequestCacheLevel.CacheOrNextCacheOnly) return RequestCacheLevel.CacheOnly; if (level == HttpRequestCacheLevel.Refresh) return RequestCacheLevel.Reload; throw new ArgumentOutOfRangeException("level"); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. /*++ Copyright (c) Microsoft Corporation Module Name: RequestCachePolicy.cs Abstract: The class implements caching policy paradigms that is used by all webrequest cache-aware clients Author: Alexei Vopilov 21-Dec-2002 Revision History: 4 Dec 2003 - Reworked as per design review. 30 Jul 2004 - Updated to accomodate FTP caching feature --*/ namespace System.Net.Cache { using System.Globalization; // The enum describes cache settings applicable for any webrequest public enum RequestCacheLevel { // Default cache behavior determined by the protocol class Default = 0, // Bypass the cache completely BypassCache = 1, // Only serve requests from cache, an exception is thrown if not found CacheOnly = 2, // Serve from the cache, but will [....] up with the server if not found CacheIfAvailable = 3, // Attempt to revalidate cache with the server, reload if unable to Revalidate = 4, // Reload the data from the origin server Reload = 5, // Bypass the cache and removing existing entries in the cache NoCacheNoStore = 6 } // // Common request cache policy used for caching of Http, FTP, etc. // public class RequestCachePolicy { private RequestCacheLevel m_Level; // // Public stuff // public RequestCachePolicy(): this (RequestCacheLevel.Default) { } public RequestCachePolicy(RequestCacheLevel level) { if (level < RequestCacheLevel.Default || level > RequestCacheLevel.NoCacheNoStore) throw new ArgumentOutOfRangeException("level"); m_Level = level; } // public RequestCacheLevel Level { get { return m_Level; } } // public override string ToString() { return "Level:" + m_Level.ToString(); } // // Internal stuff // // #if TRAVE /* // Consider removing. internal static string ToString(RequestCachePolicy Policy) { if (Policy == null) { return "null"; } return Policy.ToString(); } */ #endif } // The enum describes cache settings for http public enum HttpRequestCacheLevel { // Default cache behavior, server fresh response fomr cache, otherwise attempt // to revalidate with the server or reload Default = 0, // Bypass the cache completely BypassCache = 1, // Only serve requests from cache, an exception is thrown if not found CacheOnly = 2, // Serve from the cache, but will [....] up with the server if not found CacheIfAvailable = 3, // Validate cached data with the server even if it looks fresh Revalidate = 4, // Reload the data from the origin server Reload = 5, // Bypass the cache and removing existing entries in the cache NoCacheNoStore = 6, // Serve from cache, or the next cache along the path CacheOrNextCacheOnly= 7, // Reload the data either from the origin server or from an uplevel cache //This is equvalent to Cache-Control:MaxAge=0 HTTP semantic Refresh = 8, } // // CacheAgeControl is used to specify preferences with respect of cached item age and freshness. // public enum HttpCacheAgeControl { // Invalid value. Indicates the enum is not initialized None = 0x0, // Cached item must be at least fresh for specified period since now MinFresh = 0x1, // Cached item must be fresh and it's age must not exceed specified period MaxAge = 0x2, // Cached item may be not fresh but it's expiration must not exceed specified period MaxStale = 0x4, // Cached item must fresh for some period in future and it's age must be less than specified MaxAgeAndMinFresh = 0x3, // MaxAge|MinFresh, // Cached item may be found as stale for some period but it's age must be less than specified MaxAgeAndMaxStale = 0x6, // MaxAge|MaxStale, } // // HTTP cache policy that expresses RFC2616 HTTP caching semantic // public class HttpRequestCachePolicy: RequestCachePolicy { internal static readonly HttpRequestCachePolicy BypassCache = new HttpRequestCachePolicy(HttpRequestCacheLevel.BypassCache); //Private members private HttpRequestCacheLevel m_Level = HttpRequestCacheLevel.Default; private DateTime m_LastSyncDateUtc = DateTime.MinValue; private TimeSpan m_MaxAge = TimeSpan.MaxValue; private TimeSpan m_MinFresh = TimeSpan.MinValue; private TimeSpan m_MaxStale = TimeSpan.MinValue; // // Public stuff // public HttpRequestCachePolicy():this(HttpRequestCacheLevel.Default) { } // public HttpRequestCachePolicy(HttpRequestCacheLevel level): base(MapLevel(level)) { m_Level = level; } // // Creates an automatic cache policy that is bound to a simples age control // public HttpRequestCachePolicy(HttpCacheAgeControl cacheAgeControl, TimeSpan ageOrFreshOrStale):this(HttpRequestCacheLevel.Default) { switch(cacheAgeControl) { case HttpCacheAgeControl.MinFresh: m_MinFresh = ageOrFreshOrStale; break; case HttpCacheAgeControl.MaxAge: m_MaxAge = ageOrFreshOrStale; break; case HttpCacheAgeControl.MaxStale: m_MaxStale = ageOrFreshOrStale; break; default: throw new ArgumentException(SR.GetString(SR.net_invalid_enum, "HttpCacheAgeControl"), "cacheAgeControl"); } } // // Creates an automatic cache policy that is bound to a complex age control // public HttpRequestCachePolicy(HttpCacheAgeControl cacheAgeControl, TimeSpan maxAge, TimeSpan freshOrStale):this(HttpRequestCacheLevel.Default) { switch(cacheAgeControl) { case HttpCacheAgeControl.MinFresh: m_MinFresh = freshOrStale; break; case HttpCacheAgeControl.MaxAge: m_MaxAge = maxAge; break; case HttpCacheAgeControl.MaxStale: m_MaxStale = freshOrStale; break; case HttpCacheAgeControl.MaxAgeAndMinFresh: m_MaxAge = maxAge; m_MinFresh = freshOrStale; break; case HttpCacheAgeControl.MaxAgeAndMaxStale: m_MaxAge = maxAge; m_MaxStale = freshOrStale; break; default: throw new ArgumentException(SR.GetString(SR.net_invalid_enum, "HttpCacheAgeControl"), "cacheAgeControl"); } } // // Creates an automatic cache policy with the Date Synchronization requirement // public HttpRequestCachePolicy(DateTime cacheSyncDate):this(HttpRequestCacheLevel.Default) { m_LastSyncDateUtc = cacheSyncDate.ToUniversalTime(); } // // // public HttpRequestCachePolicy(HttpCacheAgeControl cacheAgeControl, TimeSpan maxAge, TimeSpan freshOrStale, DateTime cacheSyncDate) :this(cacheAgeControl, maxAge, freshOrStale) { m_LastSyncDateUtc = cacheSyncDate.ToUniversalTime(); } // // Properties // public new HttpRequestCacheLevel Level { get { return m_Level; } } // // Requires revalidation of items stored before lastSyncDate // public DateTime CacheSyncDate { get { if (m_LastSyncDateUtc == DateTime.MinValue || m_LastSyncDateUtc == DateTime.MaxValue) { return m_LastSyncDateUtc; } return m_LastSyncDateUtc.ToLocalTime();} } // internal DateTime InternalCacheSyncDateUtc { get {return m_LastSyncDateUtc;} } // // Specifies age policy according to HTTP 1.1 RFC caching semantic // public TimeSpan MaxAge { get {return m_MaxAge;} } // // Specifies age policy according to HTTP 1.1 RFC caching semantic // public TimeSpan MinFresh { get {return m_MinFresh;} } // // Specifies age policy according to HTTP 1.1 RFC caching semantic // public TimeSpan MaxStale { get {return m_MaxStale;} } // // // public override string ToString() { return "Level:" + m_Level.ToString() + (m_MaxAge == TimeSpan.MaxValue? string.Empty: " MaxAge:" + m_MaxAge.ToString()) + (m_MinFresh == TimeSpan.MinValue? string.Empty: " MinFresh:" + m_MinFresh.ToString()) + (m_MaxStale == TimeSpan.MinValue? string.Empty: " MaxStale:" + m_MaxStale.ToString()) + (CacheSyncDate==DateTime.MinValue? string.Empty: " CacheSyncDate:" + CacheSyncDate.ToString(CultureInfo.CurrentCulture)); } // // // private static RequestCacheLevel MapLevel(HttpRequestCacheLevel level) { if (level <= HttpRequestCacheLevel.NoCacheNoStore) return (RequestCacheLevel) level; if (level == HttpRequestCacheLevel.CacheOrNextCacheOnly) return RequestCacheLevel.CacheOnly; if (level == HttpRequestCacheLevel.Refresh) return RequestCacheLevel.Reload; throw new ArgumentOutOfRangeException("level"); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MsmqBindingMonitor.cs
- EntityDataSourceState.cs
- SdlChannelSink.cs
- XmlSortKey.cs
- EntityKey.cs
- HealthMonitoringSectionHelper.cs
- ConfigurationStrings.cs
- ContextQuery.cs
- _AutoWebProxyScriptWrapper.cs
- SuppressMessageAttribute.cs
- XmlSchemaProviderAttribute.cs
- HtmlTitle.cs
- ReferenceEqualityComparer.cs
- WorkflowItemPresenter.cs
- ScaleTransform3D.cs
- ToolBar.cs
- AppDomainAttributes.cs
- ConnectionConsumerAttribute.cs
- IChannel.cs
- EntityException.cs
- TableCell.cs
- RouteParameter.cs
- TextCharacters.cs
- LocalizationParserHooks.cs
- MenuItem.cs
- RadioButton.cs
- HttpModuleActionCollection.cs
- FtpCachePolicyElement.cs
- ReplyChannelBinder.cs
- XsdBuilder.cs
- XmlSchemaInferenceException.cs
- TypeConverterValueSerializer.cs
- XamlWriter.cs
- WindowsListViewSubItem.cs
- XmlIgnoreAttribute.cs
- InvalidCastException.cs
- Propagator.JoinPropagator.SubstitutingCloneVisitor.cs
- TextDecorationLocationValidation.cs
- HtmlString.cs
- AdRotatorDesigner.cs
- Attributes.cs
- BitmapSourceSafeMILHandle.cs
- CompilerErrorCollection.cs
- HtmlTableRowCollection.cs
- EntityDataSourceSelectingEventArgs.cs
- LinkDescriptor.cs
- SafeProcessHandle.cs
- SemaphoreFullException.cs
- AsyncOperation.cs
- AspNetCompatibilityRequirementsAttribute.cs
- LoadGrammarCompletedEventArgs.cs
- ApplicationSecurityInfo.cs
- MetabaseServerConfig.cs
- WebBrowserDocumentCompletedEventHandler.cs
- DataPagerFieldCommandEventArgs.cs
- FixedSOMTableCell.cs
- NameTable.cs
- StylusPointPropertyInfoDefaults.cs
- XmlBaseWriter.cs
- TypefaceMetricsCache.cs
- CompositionTarget.cs
- WebPartEventArgs.cs
- ListSourceHelper.cs
- AttributeQuery.cs
- ListControlActionList.cs
- ItemContainerGenerator.cs
- HandoffBehavior.cs
- CommandField.cs
- DataGridTable.cs
- SchemaInfo.cs
- dbenumerator.cs
- Verify.cs
- InputLanguage.cs
- CmsInterop.cs
- DataSourceSelectArguments.cs
- DataControlField.cs
- MethodBuilderInstantiation.cs
- BridgeDataReader.cs
- PipelineModuleStepContainer.cs
- XPathChildIterator.cs
- FrameworkContextData.cs
- OleAutBinder.cs
- SystemIcmpV6Statistics.cs
- MsmqOutputSessionChannel.cs
- JoinTreeNode.cs
- DragDropHelper.cs
- ValueTypeFixupInfo.cs
- Floater.cs
- Quaternion.cs
- PlainXmlDeserializer.cs
- BitmapEditor.cs
- SelectedDatesCollection.cs
- SinglePageViewer.cs
- XamlReaderHelper.cs
- PrefixQName.cs
- GridViewColumnCollection.cs
- ZipIOExtraField.cs
- ToolStripItemBehavior.cs
- FrameAutomationPeer.cs
- COM2ColorConverter.cs