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
- ConnectionProviderAttribute.cs
- DiagnosticStrings.cs
- ConfigurationSchemaErrors.cs
- RoutedEventArgs.cs
- processwaithandle.cs
- AssertFilter.cs
- WSTrust.cs
- DataGridViewSelectedColumnCollection.cs
- Stack.cs
- ManagementDateTime.cs
- TreeIterators.cs
- ReceiveCompletedEventArgs.cs
- MiniAssembly.cs
- WindowsNonControl.cs
- DrawingAttributes.cs
- ValidationSummary.cs
- MailBnfHelper.cs
- EncryptedData.cs
- WindowsListViewScroll.cs
- EditorAttribute.cs
- DesignerFrame.cs
- VirtualizingPanel.cs
- DateTimeFormatInfo.cs
- UDPClient.cs
- PopupControlService.cs
- Transaction.cs
- LinkDescriptor.cs
- HtmlLink.cs
- GraphicsPathIterator.cs
- InputScope.cs
- DocumentGridContextMenu.cs
- PhysicalAddress.cs
- DBCSCodePageEncoding.cs
- DataServiceKeyAttribute.cs
- XmlHelper.cs
- Common.cs
- RecognizerStateChangedEventArgs.cs
- TextAutomationPeer.cs
- CacheChildrenQuery.cs
- LambdaExpression.cs
- RuntimeCompatibilityAttribute.cs
- HtmlTextBoxAdapter.cs
- ByteAnimationUsingKeyFrames.cs
- LongSumAggregationOperator.cs
- TrackingStringDictionary.cs
- TraceSection.cs
- DataColumnPropertyDescriptor.cs
- HtmlElementCollection.cs
- CodeExpressionCollection.cs
- MessageProperties.cs
- ServiceObjectContainer.cs
- FileDialog.cs
- CompatibleComparer.cs
- UnaryNode.cs
- SvcFileManager.cs
- XamlStyleSerializer.cs
- CallbackHandler.cs
- AppDomainProtocolHandler.cs
- StateItem.cs
- FilteredXmlReader.cs
- ShapeTypeface.cs
- ReceiveParametersContent.cs
- FrameworkRichTextComposition.cs
- EntityDataReader.cs
- WebServiceEnumData.cs
- RsaElement.cs
- CapacityStreamGeometryContext.cs
- TextOutput.cs
- SystemFonts.cs
- TableCellAutomationPeer.cs
- VisualTarget.cs
- WebPartZoneBase.cs
- SqlInfoMessageEvent.cs
- GridViewColumnCollection.cs
- XmlSchemaIdentityConstraint.cs
- ContentValidator.cs
- Cursors.cs
- _CookieModule.cs
- NaturalLanguageHyphenator.cs
- InputLanguageCollection.cs
- ActivityTypeDesigner.xaml.cs
- RequiredFieldValidator.cs
- RemotingConfiguration.cs
- Empty.cs
- ToolboxItem.cs
- ContextMarshalException.cs
- UserControl.cs
- XmlChoiceIdentifierAttribute.cs
- DataIdProcessor.cs
- SapiInterop.cs
- GregorianCalendarHelper.cs
- MimeTypeAttribute.cs
- CustomValidator.cs
- CodeTypeConstructor.cs
- OptimizerPatterns.cs
- ObjectStateEntry.cs
- unsafenativemethodstextservices.cs
- CacheSection.cs
- TemplateBuilder.cs
- TimeSpan.cs