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
- WebBrowserNavigatedEventHandler.cs
- LowerCaseStringConverter.cs
- PriorityBindingExpression.cs
- shaperfactoryquerycacheentry.cs
- PrivacyNoticeBindingElement.cs
- ExtenderControl.cs
- StandardBindingImporter.cs
- CqlLexer.cs
- OutputCacheProfileCollection.cs
- ByteAnimation.cs
- TabOrder.cs
- CriticalFinalizerObject.cs
- ConsoleTraceListener.cs
- UnsafeNativeMethods.cs
- CustomWebEventKey.cs
- ConfigXmlSignificantWhitespace.cs
- ValueTypeFixupInfo.cs
- ToolStripDropDownDesigner.cs
- ImageSource.cs
- SettingsContext.cs
- SecurityState.cs
- DesignerCategoryAttribute.cs
- PrintDialog.cs
- ColumnHeaderConverter.cs
- GridViewUpdatedEventArgs.cs
- PropertyCollection.cs
- X500Name.cs
- SqlWriter.cs
- GcHandle.cs
- SiblingIterators.cs
- DataViewSetting.cs
- Helpers.cs
- XmlValidatingReaderImpl.cs
- TrustLevelCollection.cs
- ProxyHelper.cs
- WeakEventManager.cs
- IdentityHolder.cs
- FieldDescriptor.cs
- FixedPageAutomationPeer.cs
- XmlILStorageConverter.cs
- SHA512Managed.cs
- XPathMultyIterator.cs
- Vector3DAnimationUsingKeyFrames.cs
- LocalizabilityAttribute.cs
- ContainerSelectorActiveEvent.cs
- HostProtectionException.cs
- CodeExporter.cs
- SvcMapFile.cs
- FontSourceCollection.cs
- SystemWebSectionGroup.cs
- PartialTrustVisibleAssembly.cs
- ManagementObject.cs
- CollectionBuilder.cs
- CalloutQueueItem.cs
- AutomationEvent.cs
- FilterableAttribute.cs
- QilUnary.cs
- DataGridViewRow.cs
- DataContractSerializerSection.cs
- DataGridRow.cs
- FixedHighlight.cs
- AliasGenerator.cs
- SafeArrayRankMismatchException.cs
- FormViewInsertEventArgs.cs
- DataObject.cs
- IntSecurity.cs
- BitmapFrame.cs
- AuthenticationException.cs
- BaseResourcesBuildProvider.cs
- PhysicalAddress.cs
- IChannel.cs
- ClientBuildManager.cs
- SoapUnknownHeader.cs
- Parameter.cs
- BamlLocalizationDictionary.cs
- invalidudtexception.cs
- AttributedMetaModel.cs
- AnimationStorage.cs
- Geometry.cs
- ResourceReferenceExpressionConverter.cs
- SoapCodeExporter.cs
- TraceFilter.cs
- FileClassifier.cs
- ProfileGroupSettings.cs
- FunctionDetailsReader.cs
- DataStorage.cs
- DataGridViewCellPaintingEventArgs.cs
- ping.cs
- DataGridRow.cs
- HttpContext.cs
- TraceUtils.cs
- DataGridViewAdvancedBorderStyle.cs
- WebPartConnectionCollection.cs
- TextFormatterHost.cs
- CorruptingExceptionCommon.cs
- ProfilePropertySettingsCollection.cs
- PrintDialogException.cs
- RulePatternOps.cs
- GetPageCompletedEventArgs.cs
- UIElementPropertyUndoUnit.cs