Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / xsp / System / Web / PartitionResolver.cs / 1 / PartitionResolver.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web { using System; using System.Configuration; using System.Collections; using System.Threading; using System.IO; using System.Web; using System.Web.Caching; using System.Web.Util; using System.Data; using System.Data.SqlClient; using System.Text; using System.Security.Principal; using System.Xml; using System.Collections.Specialized; using System.Configuration.Provider; using System.Globalization; using System.Web.Management; using System.Web.Hosting; using System.Web.Configuration; using System.Security.Permissions; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public interface IPartitionResolver { void Initialize(); string ResolvePartition(Object key); } internal interface IPartitionInfo { string GetTracingPartitionString(); } internal delegate IPartitionInfo CreatePartitionInfo(string connectionString); class PartitionManager : IDisposable { internal PartitionManager(CreatePartitionInfo createCallback) { _createCallback = createCallback; } HybridDictionary _partitions = new HybridDictionary(); ReaderWriterLock _lock = new ReaderWriterLock(); CreatePartitionInfo _createCallback; internal object GetPartition(IPartitionResolver partitionResolver, string id) { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure)) EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_START, HttpContext.Current.WorkerRequest, partitionResolver.GetType().FullName, id); string partitionString = null; string errorMessage = null; IPartitionInfo partitionInfo = null; try { try { partitionString = partitionResolver.ResolvePartition(id); if (partitionString == null) { throw new HttpException( SR.GetString(SR.Bad_partition_resolver_connection_string, partitionResolver.GetType().FullName)); } } catch (Exception e) { errorMessage = e.Message; throw; } try { _lock.AcquireReaderLock(-1); partitionInfo = (IPartitionInfo)_partitions[partitionString]; if (partitionInfo != null) { Debug.Trace("PartitionManager", "id=" + id + "; partitionString=" + partitionString); return partitionInfo; } } finally { if (_lock.IsReaderLockHeld) { _lock.ReleaseReaderLock(); } } // Not found. Has to add it. try { _lock.AcquireWriterLock(-1); // One more time partitionInfo = (IPartitionInfo)_partitions[partitionString]; if (partitionInfo == null) { partitionInfo = _createCallback(partitionString); Debug.Trace("PartitionManager", "Add a new partition; id=" + id + "; partitionString=" + partitionString); _partitions.Add(partitionString, partitionInfo); } Debug.Trace("PartitionManager", "id=" + id + "; partitionString=" + partitionString); return partitionInfo; } finally { if (_lock.IsWriterLockHeld) { _lock.ReleaseWriterLock(); } } } finally { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure)) { string msg = errorMessage; if (msg == null) { if (partitionInfo != null) { msg = partitionInfo.GetTracingPartitionString(); } else { msg = String.Empty; } } EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_END, HttpContext.Current.WorkerRequest, msg); } } } public void Dispose() { if (_partitions == null) { return; } try { _lock.AcquireWriterLock(-1); if (_partitions != null) { foreach (PartitionInfo partitionInfo in _partitions.Values) { partitionInfo.Dispose(); } _partitions = null; } } catch { // ignore exceptions in dispose } finally { if (_lock.IsWriterLockHeld) { _lock.ReleaseWriterLock(); } } } } internal class PartitionInfo : IDisposable, IPartitionInfo { ResourcePool _rpool; internal PartitionInfo(ResourcePool rpool) { _rpool = rpool; } internal object RetrieveResource() { return _rpool.RetrieveResource(); } internal void StoreResource(IDisposable o) { _rpool.StoreResource(o); } protected virtual string TracingPartitionString { get { return String.Empty; } } string IPartitionInfo.GetTracingPartitionString() { return TracingPartitionString; } public void Dispose() { if (_rpool == null) { return; } lock (this) { if (_rpool != null) { _rpool.Dispose(); _rpool = null; } } } }; } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web { using System; using System.Configuration; using System.Collections; using System.Threading; using System.IO; using System.Web; using System.Web.Caching; using System.Web.Util; using System.Data; using System.Data.SqlClient; using System.Text; using System.Security.Principal; using System.Xml; using System.Collections.Specialized; using System.Configuration.Provider; using System.Globalization; using System.Web.Management; using System.Web.Hosting; using System.Web.Configuration; using System.Security.Permissions; [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)] public interface IPartitionResolver { void Initialize(); string ResolvePartition(Object key); } internal interface IPartitionInfo { string GetTracingPartitionString(); } internal delegate IPartitionInfo CreatePartitionInfo(string connectionString); class PartitionManager : IDisposable { internal PartitionManager(CreatePartitionInfo createCallback) { _createCallback = createCallback; } HybridDictionary _partitions = new HybridDictionary(); ReaderWriterLock _lock = new ReaderWriterLock(); CreatePartitionInfo _createCallback; internal object GetPartition(IPartitionResolver partitionResolver, string id) { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure)) EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_START, HttpContext.Current.WorkerRequest, partitionResolver.GetType().FullName, id); string partitionString = null; string errorMessage = null; IPartitionInfo partitionInfo = null; try { try { partitionString = partitionResolver.ResolvePartition(id); if (partitionString == null) { throw new HttpException( SR.GetString(SR.Bad_partition_resolver_connection_string, partitionResolver.GetType().FullName)); } } catch (Exception e) { errorMessage = e.Message; throw; } try { _lock.AcquireReaderLock(-1); partitionInfo = (IPartitionInfo)_partitions[partitionString]; if (partitionInfo != null) { Debug.Trace("PartitionManager", "id=" + id + "; partitionString=" + partitionString); return partitionInfo; } } finally { if (_lock.IsReaderLockHeld) { _lock.ReleaseReaderLock(); } } // Not found. Has to add it. try { _lock.AcquireWriterLock(-1); // One more time partitionInfo = (IPartitionInfo)_partitions[partitionString]; if (partitionInfo == null) { partitionInfo = _createCallback(partitionString); Debug.Trace("PartitionManager", "Add a new partition; id=" + id + "; partitionString=" + partitionString); _partitions.Add(partitionString, partitionInfo); } Debug.Trace("PartitionManager", "id=" + id + "; partitionString=" + partitionString); return partitionInfo; } finally { if (_lock.IsWriterLockHeld) { _lock.ReleaseWriterLock(); } } } finally { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure)) { string msg = errorMessage; if (msg == null) { if (partitionInfo != null) { msg = partitionInfo.GetTracingPartitionString(); } else { msg = String.Empty; } } EtwTrace.Trace(EtwTraceType.ETW_TYPE_SESSIONSTATE_PARTITION_END, HttpContext.Current.WorkerRequest, msg); } } } public void Dispose() { if (_partitions == null) { return; } try { _lock.AcquireWriterLock(-1); if (_partitions != null) { foreach (PartitionInfo partitionInfo in _partitions.Values) { partitionInfo.Dispose(); } _partitions = null; } } catch { // ignore exceptions in dispose } finally { if (_lock.IsWriterLockHeld) { _lock.ReleaseWriterLock(); } } } } internal class PartitionInfo : IDisposable, IPartitionInfo { ResourcePool _rpool; internal PartitionInfo(ResourcePool rpool) { _rpool = rpool; } internal object RetrieveResource() { return _rpool.RetrieveResource(); } internal void StoreResource(IDisposable o) { _rpool.StoreResource(o); } protected virtual string TracingPartitionString { get { return String.Empty; } } string IPartitionInfo.GetTracingPartitionString() { return TracingPartitionString; } public void Dispose() { if (_rpool == null) { return; } lock (this) { if (_rpool != null) { _rpool.Dispose(); _rpool = null; } } } }; } // 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
- CommonObjectSecurity.cs
- __FastResourceComparer.cs
- StorageMappingFragment.cs
- AutomationPropertyInfo.cs
- SerializationFieldInfo.cs
- DefaultValidator.cs
- RtfControlWordInfo.cs
- DefaultMemberAttribute.cs
- RSATokenProvider.cs
- QilExpression.cs
- BasicBrowserDialog.designer.cs
- SqlClientWrapperSmiStreamChars.cs
- SecurityRuntime.cs
- SpecularMaterial.cs
- NativeMethods.cs
- TextFormatterContext.cs
- Storyboard.cs
- QilList.cs
- DataGridViewColumnTypeEditor.cs
- ListViewItemEventArgs.cs
- ImageListUtils.cs
- EventLogLink.cs
- OpCopier.cs
- SqlReferenceCollection.cs
- SafeFreeMibTable.cs
- AdRotator.cs
- ExtensionQuery.cs
- AnnotationComponentManager.cs
- ConfigurationPropertyAttribute.cs
- XmlReflectionMember.cs
- ServerProtocol.cs
- Schema.cs
- SystemUdpStatistics.cs
- Identity.cs
- BinaryParser.cs
- SqlGenerator.cs
- PersonalizationProvider.cs
- LateBoundBitmapDecoder.cs
- XmlSchemaElement.cs
- SkipStoryboardToFill.cs
- Int64.cs
- InputScopeAttribute.cs
- TabPageDesigner.cs
- LayoutEditorPart.cs
- DesignerListAdapter.cs
- FigureParagraph.cs
- BasePattern.cs
- AnnotationComponentChooser.cs
- SerializableAuthorizationContext.cs
- SizeConverter.cs
- ObjRef.cs
- CqlLexerHelpers.cs
- CodeIndexerExpression.cs
- DecimalStorage.cs
- URI.cs
- StyleXamlTreeBuilder.cs
- TripleDESCryptoServiceProvider.cs
- InvalidStoreProtectionKeyException.cs
- CharAnimationUsingKeyFrames.cs
- LeaseManager.cs
- CopyOfAction.cs
- Addressing.cs
- QilName.cs
- EntityViewGenerationAttribute.cs
- RichTextBox.cs
- TextContainerHelper.cs
- ToolStripOverflow.cs
- FormParameter.cs
- SqlErrorCollection.cs
- XmlCharType.cs
- CodeAttributeArgumentCollection.cs
- MultiplexingFormatMapping.cs
- DBDataPermission.cs
- DataSourceCache.cs
- SigningDialog.cs
- InstanceCompleteException.cs
- Int64KeyFrameCollection.cs
- OletxResourceManager.cs
- CompoundFileIOPermission.cs
- DataKey.cs
- TraceLevelStore.cs
- IncrementalCompileAnalyzer.cs
- WebPart.cs
- EventMappingSettingsCollection.cs
- SamlAuthorizationDecisionStatement.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- TextAction.cs
- PageEventArgs.cs
- ParserExtension.cs
- StrongNameSignatureInformation.cs
- XmlAnyAttributeAttribute.cs
- HtmlInputHidden.cs
- DataGridViewRowConverter.cs
- CollectionContainer.cs
- DataListDesigner.cs
- XamlSerializer.cs
- NamedPermissionSet.cs
- Deserializer.cs
- formatter.cs
- SafeArrayTypeMismatchException.cs