Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RuleAttributes.cs
- XsltConvert.cs
- StorageEndPropertyMapping.cs
- CodeDOMUtility.cs
- SqlInternalConnectionTds.cs
- Misc.cs
- DescendantOverDescendantQuery.cs
- CodeExpressionStatement.cs
- SystemTcpConnection.cs
- InternalPolicyElement.cs
- SqlCaseSimplifier.cs
- sqlstateclientmanager.cs
- ReferenceConverter.cs
- DesignerTransactionCloseEvent.cs
- Calendar.cs
- TypeConverter.cs
- ProtocolsSection.cs
- KnownTypeAttribute.cs
- PersistenceContext.cs
- CalendarDateChangedEventArgs.cs
- SqlDataSource.cs
- BamlTreeNode.cs
- Vector3DKeyFrameCollection.cs
- Visual.cs
- TypeNameConverter.cs
- SqlXmlStorage.cs
- ModuleElement.cs
- CodeMemberMethod.cs
- BeginStoryboard.cs
- WebPartConnectionsDisconnectVerb.cs
- SerializationFieldInfo.cs
- EncryptedData.cs
- SqlClientPermission.cs
- FileLoadException.cs
- TCPListener.cs
- controlskin.cs
- BindingNavigator.cs
- AutoSizeToolBoxItem.cs
- _LocalDataStore.cs
- RSAOAEPKeyExchangeDeformatter.cs
- MarshalByValueComponent.cs
- FileDialogCustomPlace.cs
- SecurityManager.cs
- BeginStoryboard.cs
- ReadOnlyActivityGlyph.cs
- WebRequestModuleElementCollection.cs
- SingleAnimationUsingKeyFrames.cs
- ActiveDesignSurfaceEvent.cs
- PropertyFilterAttribute.cs
- InstanceContextManager.cs
- NonceCache.cs
- DataTableMapping.cs
- Timer.cs
- UnsafeNativeMethods.cs
- SourceCollection.cs
- Automation.cs
- StandardToolWindows.cs
- EraserBehavior.cs
- Signature.cs
- Baml6Assembly.cs
- WorkflowViewService.cs
- IndexingContentUnit.cs
- Transactions.cs
- MenuItemBindingCollection.cs
- DataGridViewImageColumn.cs
- LoggedException.cs
- IndexedString.cs
- XmlSchemaImport.cs
- ScriptServiceAttribute.cs
- DataSourceHelper.cs
- QilGenerator.cs
- NonceCache.cs
- TimeoutException.cs
- Vector3DConverter.cs
- ListParagraph.cs
- EventManager.cs
- InvalidDataException.cs
- ResourceExpressionBuilder.cs
- ConfigUtil.cs
- KeyEventArgs.cs
- LostFocusEventManager.cs
- PrimitiveXmlSerializers.cs
- ScriptRef.cs
- CacheMode.cs
- ColumnWidthChangingEvent.cs
- WmlMobileTextWriter.cs
- OutputCacheSettingsSection.cs
- OrderedDictionaryStateHelper.cs
- QilParameter.cs
- DataGridColumnCollection.cs
- CodeDirectoryCompiler.cs
- SafeNativeMethodsMilCoreApi.cs
- RawAppCommandInputReport.cs
- FieldToken.cs
- ImpersonateTokenRef.cs
- DesignBindingPicker.cs
- SnapshotChangeTrackingStrategy.cs
- ServiceBuildProvider.cs
- SerializableAttribute.cs
- CreateSequenceResponse.cs