Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Net / System / Net / ConnectionPoolManager.cs / 1305376 / ConnectionPoolManager.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net { using System; using System.Collections; using System.Diagnostics; using System.Security; using System.Security.Permissions; using System.Threading; using System.Globalization; internal class ConnectionPoolManager { private static Hashtable m_ConnectionPools = new Hashtable(); // Hashtable used for connection pools private static object s_InternalSyncObject; private ConnectionPoolManager() { } private static object InternalSyncObject { get { if (s_InternalSyncObject == null) { object o = new Object(); Interlocked.CompareExchange(ref s_InternalSyncObject, o, null); } return s_InternalSyncObject; } } /*internal static ConnectionPool[] ConnectionPools { get { lock(InternalSyncObject) { ConnectionPool [] connectionPools = new ConnectionPool[m_ConnectionPools.Count]; m_ConnectionPools.CopyTo(connectionPools, 0); return connectionPools; } } } */ private static string GenerateKey(string hostName, int port, string groupName) { return hostName+"\r"+port.ToString(NumberFormatInfo.InvariantInfo)+"\r"+groupName; } internal static ConnectionPool GetConnectionPool(ServicePoint servicePoint, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { connectionPool = new ConnectionPool(servicePoint, servicePoint.ConnectionLimit, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } /* internal static ConnectionPool GetConnectionPool(string hostName, int port, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = hostName + "\r" + port.ToString(NumberFormatInfo.InvariantInfo) + "\r" + groupName; lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { ServicePoint servicePoint = ServicePointManager.FindServicePoint(new Uri("sockets://" + hostName + ":" + port.ToString(NumberFormatInfo.InvariantInfo)), null); connectionPool = new ConnectionPool(servicePoint, m_DefaultMaxPool, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } */ internal static bool RemoveConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if(connectionPool != null) { m_ConnectionPools[key] = null; m_ConnectionPools.Remove(key); return true; } } return false; } // Gets the connection pool for the specified service point (if it exists) and // invokes ForceCleanup to gracefully clean up any connections in the pool. // // preconditions: none // // postconditions: if a connection pool for the specified servicepoint and group name // exists, any open connections that are not in use will be gracefully cleaned up. // // Note: this will not destroy the connection pool itself so any future objects that // need that connection pool will still be able to access it to create new connections // and any objects using connections in the pool will still be able to return them internal static void CleanupConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock (InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if (connectionPool != null) { connectionPool.ForceCleanup(); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Net { using System; using System.Collections; using System.Diagnostics; using System.Security; using System.Security.Permissions; using System.Threading; using System.Globalization; internal class ConnectionPoolManager { private static Hashtable m_ConnectionPools = new Hashtable(); // Hashtable used for connection pools private static object s_InternalSyncObject; private ConnectionPoolManager() { } private static object InternalSyncObject { get { if (s_InternalSyncObject == null) { object o = new Object(); Interlocked.CompareExchange(ref s_InternalSyncObject, o, null); } return s_InternalSyncObject; } } /*internal static ConnectionPool[] ConnectionPools { get { lock(InternalSyncObject) { ConnectionPool [] connectionPools = new ConnectionPool[m_ConnectionPools.Count]; m_ConnectionPools.CopyTo(connectionPools, 0); return connectionPools; } } } */ private static string GenerateKey(string hostName, int port, string groupName) { return hostName+"\r"+port.ToString(NumberFormatInfo.InvariantInfo)+"\r"+groupName; } internal static ConnectionPool GetConnectionPool(ServicePoint servicePoint, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { connectionPool = new ConnectionPool(servicePoint, servicePoint.ConnectionLimit, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } /* internal static ConnectionPool GetConnectionPool(string hostName, int port, string groupName, CreateConnectionDelegate createConnectionCallback) { string key = hostName + "\r" + port.ToString(NumberFormatInfo.InvariantInfo) + "\r" + groupName; lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool) m_ConnectionPools[key]; if (connectionPool == null) { ServicePoint servicePoint = ServicePointManager.FindServicePoint(new Uri("sockets://" + hostName + ":" + port.ToString(NumberFormatInfo.InvariantInfo)), null); connectionPool = new ConnectionPool(servicePoint, m_DefaultMaxPool, 0, servicePoint.MaxIdleTime, createConnectionCallback); m_ConnectionPools[key] = connectionPool; } return connectionPool; } } */ internal static bool RemoveConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock(InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if(connectionPool != null) { m_ConnectionPools[key] = null; m_ConnectionPools.Remove(key); return true; } } return false; } // Gets the connection pool for the specified service point (if it exists) and // invokes ForceCleanup to gracefully clean up any connections in the pool. // // preconditions: none // // postconditions: if a connection pool for the specified servicepoint and group name // exists, any open connections that are not in use will be gracefully cleaned up. // // Note: this will not destroy the connection pool itself so any future objects that // need that connection pool will still be able to access it to create new connections // and any objects using connections in the pool will still be able to return them internal static void CleanupConnectionPool(ServicePoint servicePoint, string groupName) { string key = GenerateKey(servicePoint.Host, servicePoint.Port, groupName); lock (InternalSyncObject) { ConnectionPool connectionPool = (ConnectionPool)(m_ConnectionPools[key]); if (connectionPool != null) { connectionPool.ForceCleanup(); } } } } } // 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
- EUCJPEncoding.cs
- SelectionGlyph.cs
- FrameworkObject.cs
- XmlQueryStaticData.cs
- PngBitmapDecoder.cs
- WebServiceParameterData.cs
- MetafileHeader.cs
- TextSpan.cs
- EdmToObjectNamespaceMap.cs
- X509ChainPolicy.cs
- SchemaInfo.cs
- StrongName.cs
- MenuBindingsEditorForm.cs
- StaticFileHandler.cs
- HuffCodec.cs
- util.cs
- BindingSource.cs
- ThicknessConverter.cs
- PresentationSource.cs
- ScriptingRoleServiceSection.cs
- XPathSingletonIterator.cs
- OrderablePartitioner.cs
- FormViewRow.cs
- ResourceManager.cs
- LogLogRecordEnumerator.cs
- XmlSchemaAppInfo.cs
- Style.cs
- SqlTypeSystemProvider.cs
- OleDbSchemaGuid.cs
- ServiceModelActivity.cs
- JapaneseCalendar.cs
- XmlEncoding.cs
- BaseTransportHeaders.cs
- StaticFileHandler.cs
- SqlUserDefinedTypeAttribute.cs
- GroupBoxAutomationPeer.cs
- FileDialog_Vista_Interop.cs
- DashStyle.cs
- ProcessHostServerConfig.cs
- AlignmentYValidation.cs
- CommandBindingCollection.cs
- PersianCalendar.cs
- BezierSegment.cs
- XmlILConstructAnalyzer.cs
- DataGridViewTextBoxCell.cs
- ConfigurationErrorsException.cs
- QueryTaskGroupState.cs
- ErrorStyle.cs
- ToolStripPanel.cs
- EntityDataSourceWrapper.cs
- BindableAttribute.cs
- ProviderConnectionPoint.cs
- ToolStripPanelRenderEventArgs.cs
- ADMembershipUser.cs
- XmlBinaryReader.cs
- AdCreatedEventArgs.cs
- SQLInt32.cs
- GraphicsContainer.cs
- FixUpCollection.cs
- PartialList.cs
- OracleBFile.cs
- MimeObjectFactory.cs
- TreeNodeClickEventArgs.cs
- FixedTextContainer.cs
- XamlFxTrace.cs
- DataGridSortCommandEventArgs.cs
- ConnectionProviderAttribute.cs
- _UriSyntax.cs
- DbDataRecord.cs
- DispatcherSynchronizationContext.cs
- codemethodreferenceexpression.cs
- BinaryWriter.cs
- FlowDocumentFormatter.cs
- SqlAggregateChecker.cs
- EllipseGeometry.cs
- WindowsTab.cs
- ChannelSinkStacks.cs
- UnionExpr.cs
- InnerItemCollectionView.cs
- WebPartsPersonalizationAuthorization.cs
- Logging.cs
- Empty.cs
- CreateWorkflowOwnerCommand.cs
- StorageRoot.cs
- PageAction.cs
- EncoderBestFitFallback.cs
- ApplicationException.cs
- RelationshipEnd.cs
- PnrpPeerResolverBindingElement.cs
- ConsoleTraceListener.cs
- OleDbCommandBuilder.cs
- LongPath.cs
- SHA384.cs
- ThreadAttributes.cs
- SocketInformation.cs
- HttpHandlerAction.cs
- BookmarkEventArgs.cs
- Processor.cs
- JoinSymbol.cs
- UnsafeNativeMethods.cs