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
- StyleCollection.cs
- PathParser.cs
- Triangle.cs
- DefaultMemberAttribute.cs
- TypeInitializationException.cs
- ListViewEditEventArgs.cs
- DatagridviewDisplayedBandsData.cs
- HttpVersion.cs
- FlowDocumentReader.cs
- BamlStream.cs
- StrongNameIdentityPermission.cs
- EpmSyndicationContentSerializer.cs
- XmlReflectionMember.cs
- ScriptControlManager.cs
- CalendarDay.cs
- AuthenticationService.cs
- DesignerEditorPartChrome.cs
- RSACryptoServiceProvider.cs
- TemplateColumn.cs
- HebrewCalendar.cs
- ObjectItemCollection.cs
- arclist.cs
- ClrProviderManifest.cs
- XmlLinkedNode.cs
- GestureRecognizer.cs
- CancelRequestedQuery.cs
- ApplicationFileCodeDomTreeGenerator.cs
- rsa.cs
- HtmlTextArea.cs
- WebPartEventArgs.cs
- SoapTypeAttribute.cs
- XmlWrappingWriter.cs
- SRDisplayNameAttribute.cs
- BaseProcessProtocolHandler.cs
- Rfc2898DeriveBytes.cs
- ConstraintStruct.cs
- XmlSerializationWriter.cs
- ErrorFormatterPage.cs
- TypeInitializationException.cs
- EnumBuilder.cs
- ClientBuildManagerCallback.cs
- WebColorConverter.cs
- MetafileHeader.cs
- TextEffectResolver.cs
- ErrorHandler.cs
- ExtenderControl.cs
- ConsumerConnectionPointCollection.cs
- SystemTcpStatistics.cs
- RegexParser.cs
- WorkflowTraceTransfer.cs
- TdsParserSafeHandles.cs
- OdbcReferenceCollection.cs
- PanningMessageFilter.cs
- Adorner.cs
- Environment.cs
- ApplicationServiceManager.cs
- ManagedFilter.cs
- Visitor.cs
- WebPartsPersonalization.cs
- NameTable.cs
- LinkButton.cs
- WrapperSecurityCommunicationObject.cs
- NotFiniteNumberException.cs
- WorkflowShape.cs
- FileSecurity.cs
- ICspAsymmetricAlgorithm.cs
- HierarchicalDataTemplate.cs
- SuppressMessageAttribute.cs
- RSAProtectedConfigurationProvider.cs
- NativeMethods.cs
- WebHttpDispatchOperationSelectorData.cs
- HtmlElementCollection.cs
- AssociatedControlConverter.cs
- DataException.cs
- AssertSection.cs
- ObjectReferenceStack.cs
- PrintPreviewControl.cs
- TransferRequestHandler.cs
- ScriptingRoleServiceSection.cs
- SortExpressionBuilder.cs
- TerminateDesigner.cs
- EndpointConfigContainer.cs
- FormattedTextSymbols.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- PropertyConverter.cs
- WhitespaceSignificantCollectionAttribute.cs
- codemethodreferenceexpression.cs
- UriExt.cs
- KeySplineConverter.cs
- GenericIdentity.cs
- LockRecursionException.cs
- AssemblyNameProxy.cs
- VoiceChangeEventArgs.cs
- SqlUserDefinedTypeAttribute.cs
- ProfileManager.cs
- DbProviderFactory.cs
- RadioButton.cs
- EnumerableCollectionView.cs
- CaretElement.cs
- DataGrid.cs