Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CqlBlock.cs
- TemplateBuilder.cs
- TypedElement.cs
- ArraySortHelper.cs
- SecurityUtils.cs
- StaticDataManager.cs
- QueryOutputWriter.cs
- XmlSchemaComplexContentRestriction.cs
- BackgroundFormatInfo.cs
- UnsafeNativeMethods.cs
- SamlSecurityToken.cs
- SamlSubject.cs
- ManagementObject.cs
- CursorConverter.cs
- CategoryAttribute.cs
- __Filters.cs
- CssClassPropertyAttribute.cs
- XmlEventCache.cs
- ImpersonationContext.cs
- ValueExpressions.cs
- CustomValidator.cs
- OleAutBinder.cs
- AuthStoreRoleProvider.cs
- ListenerElementsCollection.cs
- ListMarkerLine.cs
- SystemShuttingDownException.cs
- EnumValAlphaComparer.cs
- ClientSettingsSection.cs
- XPathBinder.cs
- SecurityUtils.cs
- ChannelListenerBase.cs
- BindingGroup.cs
- AssociationSetEnd.cs
- MatrixTransform.cs
- TableItemProviderWrapper.cs
- OdbcDataAdapter.cs
- ConfigXmlDocument.cs
- AttachmentCollection.cs
- SendingRequestEventArgs.cs
- XmlArrayItemAttribute.cs
- DataContractSerializer.cs
- MultilineStringConverter.cs
- FilteredXmlReader.cs
- PrimitiveSchema.cs
- DocumentApplication.cs
- SymbolType.cs
- RichTextBoxAutomationPeer.cs
- TextCollapsingProperties.cs
- GenerateTemporaryAssemblyTask.cs
- LinkArea.cs
- SystemEvents.cs
- WindowsRichEdit.cs
- ToolboxItemAttribute.cs
- RayMeshGeometry3DHitTestResult.cs
- HyperLinkField.cs
- EncoderFallback.cs
- XpsFilter.cs
- PrtCap_Public_Simple.cs
- ConsumerConnectionPointCollection.cs
- ExpressionsCollectionEditor.cs
- ContentHostHelper.cs
- CfgParser.cs
- UserMapPath.cs
- SqlVisitor.cs
- SinglePageViewer.cs
- ContextBase.cs
- SmtpNetworkElement.cs
- configsystem.cs
- WrappedReader.cs
- FixedFindEngine.cs
- WebServiceClientProxyGenerator.cs
- ConvertEvent.cs
- DataGridViewCellStyleConverter.cs
- ProviderSettingsCollection.cs
- DataBinding.cs
- SiteMapNodeItem.cs
- MetabaseReader.cs
- ResourceWriter.cs
- MetadataArtifactLoaderCompositeResource.cs
- TextSchema.cs
- DataRecordInfo.cs
- CaseDesigner.xaml.cs
- CancellableEnumerable.cs
- WhitespaceRule.cs
- OleDbEnumerator.cs
- EventTrigger.cs
- Rule.cs
- Int32CAMarshaler.cs
- TextHidden.cs
- CompilerError.cs
- MouseButton.cs
- DiscoveryDocumentLinksPattern.cs
- KnowledgeBase.cs
- DictionaryGlobals.cs
- CreateParams.cs
- GeneralTransform3DTo2D.cs
- QilSortKey.cs
- SqlUtil.cs
- InputScopeNameConverter.cs
- VerificationAttribute.cs