Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / httpapplicationstate.cs / 1 / httpapplicationstate.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Application State Dictionary class * * Copyright (c) 1999 Microsoft Corporation */ namespace System.Web { using System.Threading; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Collections; using System.Collections.Specialized; using System.Web; using System.Web.Util; // // Application state collection // ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class HttpApplicationState : NameObjectCollectionBase { // app lock with auto-unlock feature private HttpApplicationStateLock _lock = new HttpApplicationStateLock(); // static object collections private HttpStaticObjectsCollection _applicationStaticObjects; private HttpStaticObjectsCollection _sessionStaticObjects; internal HttpApplicationState() : this(null, null) { } internal HttpApplicationState(HttpStaticObjectsCollection applicationStaticObjects, HttpStaticObjectsCollection sessionStaticObjects) : base(Misc.CaseInsensitiveInvariantKeyComparer) { _applicationStaticObjects = applicationStaticObjects; if (_applicationStaticObjects == null) _applicationStaticObjects = new HttpStaticObjectsCollection(); _sessionStaticObjects = sessionStaticObjects; if (_sessionStaticObjects == null) _sessionStaticObjects = new HttpStaticObjectsCollection(); } // // Internal accessor to session static objects collection // internal HttpStaticObjectsCollection SessionStaticObjects { get { return _sessionStaticObjects;} } // // Implementation of standard collection stuff // ////// The HttpApplicationState class enables developers to /// share global information across multiple requests, sessions, and pipelines /// within an ASP.NET application. (An ASP.NET application is the sum of all files, pages, /// handlers, modules, and code /// within the scope of a virtual directory and its /// subdirectories on a single web server). /// ////// public override int Count { get { int c = 0; _lock.AcquireRead(); try { c = base.Count; } finally { _lock.ReleaseRead(); } return c; } } // modifying methods ///Gets /// the number of item objects in the application state collection. ////// public void Add(String name, Object value) { _lock.AcquireWrite(); try { BaseAdd(name, value); } finally { _lock.ReleaseWrite(); } } ////// Adds /// a new state object to the application state collection. /// ////// public void Set(String name, Object value) { _lock.AcquireWrite(); try { BaseSet(name, value); } finally { _lock.ReleaseWrite(); } } ///Updates an HttpApplicationState value within the collection. ////// public void Remove(String name) { _lock.AcquireWrite(); try { BaseRemove(name); } finally { _lock.ReleaseWrite(); } } ///Removes /// an /// object from the application state collection by name. ////// public void RemoveAt(int index) { _lock.AcquireWrite(); try { BaseRemoveAt(index); } finally { _lock.ReleaseWrite(); } } ///Removes /// an /// object from the application state collection by name. ////// public void Clear() { _lock.AcquireWrite(); try { BaseClear(); } finally { _lock.ReleaseWrite(); } } ////// Removes /// all objects from the application state collection. /// ////// public void RemoveAll() { Clear(); } // access by key ////// Removes /// all objects from the application state collection. /// ////// public Object Get(String name) { Object obj = null; _lock.AcquireRead(); try { obj = BaseGet(name); } finally { _lock.ReleaseRead(); } return obj; } ////// Enables user to retrieve application state object by name. /// ////// public Object this[String name] { get { return Get(name);} set { Set(name, value);} } // access by index ///Enables /// a user to add/remove/update a single application state object. ////// public Object Get(int index) { Object obj = null; _lock.AcquireRead(); try { obj = BaseGet(index); } finally { _lock.ReleaseRead(); } return obj; } ////// Enables user /// to retrieve a single application state object by index. /// ////// public String GetKey(int index) { String s = null; _lock.AcquireRead(); try { s = BaseGetKey(index); } finally { _lock.ReleaseRead(); } return s; } ////// Enables user to retrieve an application state object name by index. /// ////// public Object this[int index] { get { return Get(index);} } // access to keys and values as arrays ////// Enables /// user to retrieve an application state object by index. /// ////// public String[] AllKeys { get { String [] allKeys = null; _lock.AcquireRead(); try { allKeys = BaseGetAllKeys(); } finally { _lock.ReleaseRead(); } return allKeys; } } // // Public properties // ////// Enables user /// to retrieve all application state object names in collection. /// ////// public HttpApplicationState Contents { get { return this;} } ////// Returns "this". Provided for legacy ASP compatibility. /// ////// public HttpStaticObjectsCollection StaticObjects { get { return _applicationStaticObjects;} } // // Locking support // ////// Exposes all objects declared via an <object /// runat=server></object> tag within the ASP.NET application file. /// ////// public void Lock() { _lock.AcquireWrite(); } ////// Locks /// access to all application state variables. Facilitates access /// synchronization. /// ////// public void UnLock() { _lock.ReleaseWrite(); } internal void EnsureUnLock() { _lock.EnsureReleaseWrite(); } } // // Recursive read-write lock that allows removing of all // outstanding write locks from the current thread at once // internal class HttpApplicationStateLock : ReadWriteObjectLock { private int _recursionCount; private int _threadId; internal HttpApplicationStateLock() { } internal override void AcquireRead() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId != currentThreadId) base.AcquireRead(); // only if no write lock } internal override void ReleaseRead() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId != currentThreadId) base.ReleaseRead(); // only if no write lock } internal override void AcquireWrite() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId == currentThreadId) { _recursionCount++; } else { base.AcquireWrite(); _threadId = currentThreadId; _recursionCount = 1; } } internal override void ReleaseWrite() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId == currentThreadId) { if (--_recursionCount == 0) { _threadId = 0; base.ReleaseWrite(); } } } // // release all write locks held by the current thread // internal void EnsureReleaseWrite() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId == currentThreadId) { _threadId = 0; _recursionCount = 0; base.ReleaseWrite(); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ ///// Unocks access to all application state variables. Facilitates access /// synchronization. /// ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* * Application State Dictionary class * * Copyright (c) 1999 Microsoft Corporation */ namespace System.Web { using System.Threading; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Collections; using System.Collections.Specialized; using System.Web; using System.Web.Util; // // Application state collection // ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] public sealed class HttpApplicationState : NameObjectCollectionBase { // app lock with auto-unlock feature private HttpApplicationStateLock _lock = new HttpApplicationStateLock(); // static object collections private HttpStaticObjectsCollection _applicationStaticObjects; private HttpStaticObjectsCollection _sessionStaticObjects; internal HttpApplicationState() : this(null, null) { } internal HttpApplicationState(HttpStaticObjectsCollection applicationStaticObjects, HttpStaticObjectsCollection sessionStaticObjects) : base(Misc.CaseInsensitiveInvariantKeyComparer) { _applicationStaticObjects = applicationStaticObjects; if (_applicationStaticObjects == null) _applicationStaticObjects = new HttpStaticObjectsCollection(); _sessionStaticObjects = sessionStaticObjects; if (_sessionStaticObjects == null) _sessionStaticObjects = new HttpStaticObjectsCollection(); } // // Internal accessor to session static objects collection // internal HttpStaticObjectsCollection SessionStaticObjects { get { return _sessionStaticObjects;} } // // Implementation of standard collection stuff // ////// The HttpApplicationState class enables developers to /// share global information across multiple requests, sessions, and pipelines /// within an ASP.NET application. (An ASP.NET application is the sum of all files, pages, /// handlers, modules, and code /// within the scope of a virtual directory and its /// subdirectories on a single web server). /// ////// public override int Count { get { int c = 0; _lock.AcquireRead(); try { c = base.Count; } finally { _lock.ReleaseRead(); } return c; } } // modifying methods ///Gets /// the number of item objects in the application state collection. ////// public void Add(String name, Object value) { _lock.AcquireWrite(); try { BaseAdd(name, value); } finally { _lock.ReleaseWrite(); } } ////// Adds /// a new state object to the application state collection. /// ////// public void Set(String name, Object value) { _lock.AcquireWrite(); try { BaseSet(name, value); } finally { _lock.ReleaseWrite(); } } ///Updates an HttpApplicationState value within the collection. ////// public void Remove(String name) { _lock.AcquireWrite(); try { BaseRemove(name); } finally { _lock.ReleaseWrite(); } } ///Removes /// an /// object from the application state collection by name. ////// public void RemoveAt(int index) { _lock.AcquireWrite(); try { BaseRemoveAt(index); } finally { _lock.ReleaseWrite(); } } ///Removes /// an /// object from the application state collection by name. ////// public void Clear() { _lock.AcquireWrite(); try { BaseClear(); } finally { _lock.ReleaseWrite(); } } ////// Removes /// all objects from the application state collection. /// ////// public void RemoveAll() { Clear(); } // access by key ////// Removes /// all objects from the application state collection. /// ////// public Object Get(String name) { Object obj = null; _lock.AcquireRead(); try { obj = BaseGet(name); } finally { _lock.ReleaseRead(); } return obj; } ////// Enables user to retrieve application state object by name. /// ////// public Object this[String name] { get { return Get(name);} set { Set(name, value);} } // access by index ///Enables /// a user to add/remove/update a single application state object. ////// public Object Get(int index) { Object obj = null; _lock.AcquireRead(); try { obj = BaseGet(index); } finally { _lock.ReleaseRead(); } return obj; } ////// Enables user /// to retrieve a single application state object by index. /// ////// public String GetKey(int index) { String s = null; _lock.AcquireRead(); try { s = BaseGetKey(index); } finally { _lock.ReleaseRead(); } return s; } ////// Enables user to retrieve an application state object name by index. /// ////// public Object this[int index] { get { return Get(index);} } // access to keys and values as arrays ////// Enables /// user to retrieve an application state object by index. /// ////// public String[] AllKeys { get { String [] allKeys = null; _lock.AcquireRead(); try { allKeys = BaseGetAllKeys(); } finally { _lock.ReleaseRead(); } return allKeys; } } // // Public properties // ////// Enables user /// to retrieve all application state object names in collection. /// ////// public HttpApplicationState Contents { get { return this;} } ////// Returns "this". Provided for legacy ASP compatibility. /// ////// public HttpStaticObjectsCollection StaticObjects { get { return _applicationStaticObjects;} } // // Locking support // ////// Exposes all objects declared via an <object /// runat=server></object> tag within the ASP.NET application file. /// ////// public void Lock() { _lock.AcquireWrite(); } ////// Locks /// access to all application state variables. Facilitates access /// synchronization. /// ////// public void UnLock() { _lock.ReleaseWrite(); } internal void EnsureUnLock() { _lock.EnsureReleaseWrite(); } } // // Recursive read-write lock that allows removing of all // outstanding write locks from the current thread at once // internal class HttpApplicationStateLock : ReadWriteObjectLock { private int _recursionCount; private int _threadId; internal HttpApplicationStateLock() { } internal override void AcquireRead() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId != currentThreadId) base.AcquireRead(); // only if no write lock } internal override void ReleaseRead() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId != currentThreadId) base.ReleaseRead(); // only if no write lock } internal override void AcquireWrite() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId == currentThreadId) { _recursionCount++; } else { base.AcquireWrite(); _threadId = currentThreadId; _recursionCount = 1; } } internal override void ReleaseWrite() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId == currentThreadId) { if (--_recursionCount == 0) { _threadId = 0; base.ReleaseWrite(); } } } // // release all write locks held by the current thread // internal void EnsureReleaseWrite() { int currentThreadId = SafeNativeMethods.GetCurrentThreadId(); if (_threadId == currentThreadId) { _threadId = 0; _recursionCount = 0; base.ReleaseWrite(); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007./// Unocks access to all application state variables. Facilitates access /// synchronization. /// ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- dataprotectionpermission.cs
- ParsedAttributeCollection.cs
- RoutedEventConverter.cs
- mediaeventshelper.cs
- ColorDialog.cs
- DataGridItemCollection.cs
- NativeMethods.cs
- IndividualDeviceConfig.cs
- QueryRewriter.cs
- EventLevel.cs
- ConfigXmlAttribute.cs
- HyperLinkDataBindingHandler.cs
- ActiveXHost.cs
- WebScriptEnablingElement.cs
- tabpagecollectioneditor.cs
- FactoryGenerator.cs
- EventMappingSettingsCollection.cs
- GlobalProxySelection.cs
- BufferedReadStream.cs
- Logging.cs
- CommonObjectSecurity.cs
- PenContexts.cs
- PrePostDescendentsWalker.cs
- BooleanFacetDescriptionElement.cs
- CompilationSection.cs
- TimeEnumHelper.cs
- UshortList2.cs
- ActivityInstanceMap.cs
- ConnectionManagementElementCollection.cs
- XmlUtilWriter.cs
- GridViewPageEventArgs.cs
- IdnMapping.cs
- WmlFormAdapter.cs
- ConfigXmlText.cs
- TimeZone.cs
- OracleLob.cs
- KeyGestureConverter.cs
- CategoryValueConverter.cs
- CodeSubDirectory.cs
- PropertyMetadata.cs
- PropertyDescriptorGridEntry.cs
- CompareValidator.cs
- Typeface.cs
- Journaling.cs
- GacUtil.cs
- Win32Native.cs
- EdmPropertyAttribute.cs
- SqlFlattener.cs
- FixedTextContainer.cs
- SqlInternalConnectionTds.cs
- UnSafeCharBuffer.cs
- unitconverter.cs
- UnsafeCollabNativeMethods.cs
- AnnotationAuthorChangedEventArgs.cs
- DoubleIndependentAnimationStorage.cs
- ConfigXmlCDataSection.cs
- AccessDataSource.cs
- DesignerTransaction.cs
- ListItem.cs
- ModelItemKeyValuePair.cs
- Literal.cs
- HashMembershipCondition.cs
- Visual3D.cs
- OrderByQueryOptionExpression.cs
- DynamicActivityXamlReader.cs
- TimeSpanOrInfiniteConverter.cs
- ToolStripContentPanel.cs
- VisualStyleElement.cs
- SpeechRecognitionEngine.cs
- AvTrace.cs
- COMException.cs
- BaseAddressPrefixFilterElement.cs
- MultipleViewPatternIdentifiers.cs
- DataGridParentRows.cs
- UnionExpr.cs
- SqlException.cs
- PersianCalendar.cs
- ExtendedTransformFactory.cs
- OrderPreservingPipeliningSpoolingTask.cs
- SettingsPropertyNotFoundException.cs
- XmlEnumAttribute.cs
- StaticSiteMapProvider.cs
- StreamSecurityUpgradeInitiatorBase.cs
- DataSourceView.cs
- SimpleWorkerRequest.cs
- CorrelationValidator.cs
- SqlFunctionAttribute.cs
- GridToolTip.cs
- WindowsGraphics2.cs
- ApplicationGesture.cs
- WebCategoryAttribute.cs
- TcpSocketManager.cs
- WebPartDisplayMode.cs
- WsdlInspector.cs
- DependencyPropertyKind.cs
- XamlToRtfParser.cs
- ResourceKey.cs
- CssTextWriter.cs
- columnmapkeybuilder.cs
- ToolStripContainerDesigner.cs