Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / Configuration / RequestCachingSection.cs / 1305376 / RequestCachingSection.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net.Configuration
{
using Microsoft.Win32;
using System.Configuration;
using System.Globalization;
using System.Net.Cache;
using System.Threading;
public sealed class RequestCachingSection : ConfigurationSection
{
public RequestCachingSection()
{
this.properties.Add(this.disableAllCaching);
this.properties.Add(this.defaultPolicyLevel);
this.properties.Add(this.isPrivateCache);
this.properties.Add(this.defaultHttpCachePolicy);
this.properties.Add(this.defaultFtpCachePolicy);
this.properties.Add(this.unspecifiedMaximumAge);
}
[ConfigurationProperty(ConfigurationStrings.DefaultHttpCachePolicy)]
public HttpCachePolicyElement DefaultHttpCachePolicy
{
get { return (HttpCachePolicyElement)this[this.defaultHttpCachePolicy]; }
}
[ConfigurationProperty(ConfigurationStrings.DefaultFtpCachePolicy)]
public FtpCachePolicyElement DefaultFtpCachePolicy
{
get { return (FtpCachePolicyElement)this[this.defaultFtpCachePolicy]; }
}
[ConfigurationProperty(ConfigurationStrings.DefaultPolicyLevel, DefaultValue=(RequestCacheLevel) RequestCacheLevel.BypassCache)]
public RequestCacheLevel DefaultPolicyLevel
{
get { return (RequestCacheLevel)this[this.defaultPolicyLevel]; }
set { this[this.defaultPolicyLevel] = value; }
}
#if !FEATURE_PAL // FEATURE_PAL - Caching is not supported by default
[ConfigurationProperty(ConfigurationStrings.DisableAllCaching, DefaultValue=false)]
#else // !FEATURE_PAL
[ConfigurationProperty(ConfigurationStrings.DisableAllCaching, DefaultValue=true)]
#endif // !FEATURE_PAL
public bool DisableAllCaching
{
get { return (bool)this[this.disableAllCaching]; }
set { this[this.disableAllCaching] = value; }
}
[ConfigurationProperty(ConfigurationStrings.IsPrivateCache, DefaultValue=true)]
public bool IsPrivateCache
{
get { return (bool)this[this.isPrivateCache]; }
set { this[this.isPrivateCache] = value; }
}
[ConfigurationProperty(ConfigurationStrings.UnspecifiedMaximumAge, DefaultValue = "1.00:00:00")]
public TimeSpan UnspecifiedMaximumAge
{
get { return (TimeSpan)this[this.unspecifiedMaximumAge]; }
set { this[this.unspecifiedMaximumAge] = value; }
}
//
// If DisableAllCaching is set once to true it will not change.
//
protected override void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey)
{
bool tempDisableAllCaching = this.DisableAllCaching;
base.DeserializeElement(reader, serializeCollectionKey);
if (tempDisableAllCaching)
{
this.DisableAllCaching = true;
}
}
protected override void PostDeserialize()
{
// Perf optimization. If the configuration is coming from machine.config
// It is safe and we don't need to check for permissions.
if (EvaluationContext.IsMachineLevel)
return;
try {
ExceptionHelper.WebPermissionUnrestricted.Demand();
} catch (Exception exception) {
throw new ConfigurationErrorsException(
SR.GetString(SR.net_config_section_permission,
ConfigurationStrings.RequestCachingSectionName),
exception);
}
}
protected override ConfigurationPropertyCollection Properties
{
get { return this.properties; }
}
ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection();
readonly ConfigurationProperty defaultHttpCachePolicy =
new ConfigurationProperty(ConfigurationStrings.DefaultHttpCachePolicy,
typeof(HttpCachePolicyElement),
null,
ConfigurationPropertyOptions.None);
readonly ConfigurationProperty defaultFtpCachePolicy =
new ConfigurationProperty(ConfigurationStrings.DefaultFtpCachePolicy,
typeof(FtpCachePolicyElement),
null,
ConfigurationPropertyOptions.None);
readonly ConfigurationProperty defaultPolicyLevel =
new ConfigurationProperty(ConfigurationStrings.DefaultPolicyLevel,
typeof(RequestCacheLevel),
RequestCacheLevel.BypassCache,
ConfigurationPropertyOptions.None);
readonly ConfigurationProperty disableAllCaching =
#if !FEATURE_PAL // FEATURE_PAL - Caching is not supported by default
new ConfigurationProperty(ConfigurationStrings.DisableAllCaching,
typeof(bool),
false,
ConfigurationPropertyOptions.None);
#else // !FEATURE_PAL
new ConfigurationProperty(ConfigurationStrings.DisableAllCaching,
typeof(bool),
true,
ConfigurationPropertyOptions.None);
#endif // !FEATURE_PAL
readonly ConfigurationProperty isPrivateCache =
new ConfigurationProperty(ConfigurationStrings.IsPrivateCache,
typeof(bool),
true,
ConfigurationPropertyOptions.None);
readonly ConfigurationProperty unspecifiedMaximumAge =
new ConfigurationProperty(ConfigurationStrings.UnspecifiedMaximumAge,
typeof(TimeSpan),
TimeSpan.FromDays(1),
ConfigurationPropertyOptions.None);
}
internal sealed class RequestCachingSectionInternal
{
private RequestCachingSectionInternal() { }
internal RequestCachingSectionInternal(RequestCachingSection section)
{
#if !FEATURE_PAL // IE caching
//ROTORTODO: Review // IE caching
//CORIOLISTODO: Review // IE caching
if (!section.DisableAllCaching)
{
this.defaultCachePolicy = new RequestCachePolicy(section.DefaultPolicyLevel); // default should be RequestCacheLevel.BypassCache
this.isPrivateCache = section.IsPrivateCache;
this.unspecifiedMaximumAge = section.UnspecifiedMaximumAge; //default should be TimeSpan.FromDays(1)
}
else
{
this.disableAllCaching = true;
}
this.httpRequestCacheValidator = new HttpRequestCacheValidator(false, this.UnspecifiedMaximumAge);
this.ftpRequestCacheValidator = new FtpRequestCacheValidator(false, this.UnspecifiedMaximumAge);
this.defaultCache = new Microsoft.Win32.WinInetCache(this.IsPrivateCache, true, true);
if (section.DisableAllCaching)
return;
HttpCachePolicyElement httpPolicy = section.DefaultHttpCachePolicy;
if (httpPolicy.WasReadFromConfig)
{
if (httpPolicy.PolicyLevel == HttpRequestCacheLevel.Default)
{
HttpCacheAgeControl cacheAgeControl =
(httpPolicy.MinimumFresh != TimeSpan.MinValue ? HttpCacheAgeControl.MaxAgeAndMinFresh : HttpCacheAgeControl.MaxAgeAndMaxStale);
this.defaultHttpCachePolicy = new HttpRequestCachePolicy(cacheAgeControl, httpPolicy.MaximumAge, (httpPolicy.MinimumFresh != TimeSpan.MinValue ? httpPolicy.MinimumFresh : httpPolicy.MaximumStale));
}
else
{
this.defaultHttpCachePolicy = new HttpRequestCachePolicy(httpPolicy.PolicyLevel);
}
}
#else //!FEATURE_PAL // IE caching
#if CORIOLIS
if (section.DisableAllCaching)
{
this.httpRequestCacheValidator = new HttpRequestCacheValidator(false, this.UnspecifiedMaximumAge);
this.disableAllCaching = true;
}
else
{
// Caching needs to be disabled in the configuration since Coriolis
// does not support it.
// This is a validity check, that it is actually disabled.
throw new NotImplementedException("ROTORTODO - RequestCaching - IE caching");
}
#else // CORIOLIS
this.httpRequestCacheValidator = new HttpRequestCacheValidator(false, this.UnspecifiedMaximumAge);
this.disableAllCaching = true;
#endif
#endif //!FEATURE_PAL // IE caching
FtpCachePolicyElement ftpPolicy = section.DefaultFtpCachePolicy;
if (ftpPolicy.WasReadFromConfig)
{
this.defaultFtpCachePolicy = new RequestCachePolicy(ftpPolicy.PolicyLevel);
}
}
internal static object ClassSyncObject
{
get
{
if (classSyncObject == null)
{
object o = new object();
Interlocked.CompareExchange(ref classSyncObject, o, null);
}
return classSyncObject;
}
}
internal bool DisableAllCaching
{
get { return this.disableAllCaching; }
}
internal RequestCache DefaultCache
{
get { return this.defaultCache; }
}
internal RequestCachePolicy DefaultCachePolicy
{
get { return this.defaultCachePolicy; }
}
internal bool IsPrivateCache
{
get { return this.isPrivateCache; }
}
internal TimeSpan UnspecifiedMaximumAge
{
get { return this.unspecifiedMaximumAge; }
}
internal HttpRequestCachePolicy DefaultHttpCachePolicy
{
get { return this.defaultHttpCachePolicy; }
}
internal RequestCachePolicy DefaultFtpCachePolicy
{
get { return this.defaultFtpCachePolicy; }
}
internal HttpRequestCacheValidator DefaultHttpValidator
{
get { return this.httpRequestCacheValidator; }
}
internal FtpRequestCacheValidator DefaultFtpValidator
{
get { return this.ftpRequestCacheValidator; }
}
static internal RequestCachingSectionInternal GetSection()
{
lock (RequestCachingSectionInternal.ClassSyncObject)
{
RequestCachingSection section = PrivilegedConfigurationManager.GetSection(ConfigurationStrings.RequestCachingSectionPath) as RequestCachingSection;
if (section == null)
return null;
try
{
return new RequestCachingSectionInternal(section);
}
catch (Exception exception)
{
if (NclUtilities.IsFatal(exception)) throw;
throw new ConfigurationErrorsException(SR.GetString(SR.net_config_requestcaching), exception);
}
}
}
static object classSyncObject;
RequestCache defaultCache;
HttpRequestCachePolicy defaultHttpCachePolicy;
RequestCachePolicy defaultFtpCachePolicy;
RequestCachePolicy defaultCachePolicy;
bool disableAllCaching;
HttpRequestCacheValidator httpRequestCacheValidator;
FtpRequestCacheValidator ftpRequestCacheValidator;
bool isPrivateCache;
TimeSpan unspecifiedMaximumAge;
}
}
// 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
- MeshGeometry3D.cs
- StaticResourceExtension.cs
- StreamWithDictionary.cs
- ImportException.cs
- XmlSchemaRedefine.cs
- LoginViewDesigner.cs
- CustomAttribute.cs
- SolidBrush.cs
- StartFileNameEditor.cs
- DataServiceQueryException.cs
- FlowDocumentReaderAutomationPeer.cs
- Nullable.cs
- SchemaCollectionCompiler.cs
- DataGridView.cs
- RenderingEventArgs.cs
- TextViewElement.cs
- odbcmetadatacolumnnames.cs
- TcpServerChannel.cs
- LabelEditEvent.cs
- FilterQuery.cs
- ResourceDescriptionAttribute.cs
- SemanticAnalyzer.cs
- SqlMethodTransformer.cs
- ManualResetEvent.cs
- ImportException.cs
- InputLanguageCollection.cs
- RuntimeComponentFilter.cs
- UpdatePanelTriggerCollection.cs
- DataGridDetailsPresenter.cs
- TdsValueSetter.cs
- ValueHandle.cs
- BulletedList.cs
- Authorization.cs
- _ConnectOverlappedAsyncResult.cs
- UnmanagedBitmapWrapper.cs
- HtmlDocument.cs
- CallSite.cs
- HashCodeCombiner.cs
- figurelength.cs
- EditingScopeUndoUnit.cs
- TemplateEditingFrame.cs
- StringWriter.cs
- OpCopier.cs
- ProjectionNode.cs
- EncoderFallback.cs
- OleDbTransaction.cs
- ScrollPattern.cs
- DebugControllerThread.cs
- Timer.cs
- TextOptions.cs
- UIPropertyMetadata.cs
- DesignerMetadata.cs
- TypeSource.cs
- SmtpCommands.cs
- NativeRightsManagementAPIsStructures.cs
- XmlTextAttribute.cs
- SqlDeflator.cs
- UIElementIsland.cs
- RemoteCryptoRsaServiceProvider.cs
- SqlSelectStatement.cs
- Pkcs9Attribute.cs
- ClientRoleProvider.cs
- MenuItem.cs
- ConversionContext.cs
- Stylus.cs
- XmlDomTextWriter.cs
- EditorPartChrome.cs
- TextTreeTextBlock.cs
- SynchronizationLockException.cs
- ResolveCompletedEventArgs.cs
- AudioFormatConverter.cs
- ResourceDisplayNameAttribute.cs
- AliasGenerator.cs
- HttpDigestClientCredential.cs
- SessionPageStateSection.cs
- Button.cs
- OrthographicCamera.cs
- AnnotationHighlightLayer.cs
- RuleSet.cs
- CqlErrorHelper.cs
- GroupStyle.cs
- Guid.cs
- SourceFileBuildProvider.cs
- ReachDocumentPageSerializer.cs
- ToolStripItemEventArgs.cs
- SchemaCollectionPreprocessor.cs
- DataGridViewTextBoxColumn.cs
- ContentPathSegment.cs
- Pair.cs
- Base64Encoder.cs
- SortDescription.cs
- hresults.cs
- ItemAutomationPeer.cs
- SizeFConverter.cs
- CompositeFontFamily.cs
- XmlDocumentFragment.cs
- SchemaTableOptionalColumn.cs
- HttpContext.cs
- ContainerControlDesigner.cs