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
- EntityViewGenerator.cs
- Image.cs
- ParserHooks.cs
- keycontainerpermission.cs
- PathFigure.cs
- SchemaImporterExtensionElement.cs
- OdbcEnvironment.cs
- ComponentCollection.cs
- XdrBuilder.cs
- ResourceProviderFactory.cs
- UriSectionReader.cs
- BehaviorEditorPart.cs
- DataGridViewRowEventArgs.cs
- ClientSettingsProvider.cs
- RectAnimation.cs
- MissingMethodException.cs
- SafeCryptContextHandle.cs
- NavigatorInput.cs
- URI.cs
- Stroke2.cs
- BamlBinaryWriter.cs
- TreeViewImageGenerator.cs
- XsltContext.cs
- EntityDataSourceSelectingEventArgs.cs
- EdmEntityTypeAttribute.cs
- HttpClientCertificate.cs
- SQLSingleStorage.cs
- Win32Interop.cs
- DataFormats.cs
- SingleConverter.cs
- PackWebRequestFactory.cs
- QuaternionAnimation.cs
- Int32Rect.cs
- Polyline.cs
- ContentPlaceHolder.cs
- OleDbError.cs
- LexicalChunk.cs
- Calendar.cs
- CheckBox.cs
- DbMetaDataFactory.cs
- ForwardPositionQuery.cs
- FilteredAttributeCollection.cs
- FusionWrap.cs
- BindingSource.cs
- AmbientLight.cs
- Accessible.cs
- TextElementEnumerator.cs
- Transform3D.cs
- metadatamappinghashervisitor.cs
- EncoderParameter.cs
- BoundPropertyEntry.cs
- CompilerCollection.cs
- PerfCounters.cs
- Event.cs
- SymLanguageVendor.cs
- HuffCodec.cs
- RegexNode.cs
- InstanceKeyView.cs
- KeyNotFoundException.cs
- X509SecurityTokenParameters.cs
- TraceHandlerErrorFormatter.cs
- nulltextcontainer.cs
- ListBoxItemAutomationPeer.cs
- SchemaImporterExtensionsSection.cs
- GeometryCollection.cs
- ExcludeFromCodeCoverageAttribute.cs
- TreeView.cs
- TimerEventSubscriptionCollection.cs
- MdImport.cs
- OleDbParameterCollection.cs
- ResizingMessageFilter.cs
- DataGridPageChangedEventArgs.cs
- DbDataRecord.cs
- CompositeTypefaceMetrics.cs
- GenericTransactionFlowAttribute.cs
- XmlMembersMapping.cs
- StringTraceRecord.cs
- AccessDataSourceWizardForm.cs
- CreateUserWizardStep.cs
- SyntaxCheck.cs
- PeerObject.cs
- EventRouteFactory.cs
- SqlBulkCopyColumnMapping.cs
- UrlMappingsSection.cs
- ActivityInstanceReference.cs
- ServiceEndpoint.cs
- DataGridViewCellPaintingEventArgs.cs
- Model3D.cs
- ClientScriptManager.cs
- SingleKeyFrameCollection.cs
- HtmlElementCollection.cs
- ToolBarOverflowPanel.cs
- ToolStripItemClickedEventArgs.cs
- CodeCastExpression.cs
- DefaultParameterValueAttribute.cs
- HtmlFormWrapper.cs
- AlignmentXValidation.cs
- XmlLanguageConverter.cs
- SurrogateSelector.cs
- MemoryFailPoint.cs