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
- DesignerDeviceConfig.cs
- EntryPointNotFoundException.cs
- LineServicesCallbacks.cs
- TextDecorations.cs
- AppSettingsExpressionBuilder.cs
- DictationGrammar.cs
- SecureConversationServiceElement.cs
- DesignBindingPropertyDescriptor.cs
- DataServices.cs
- SmiContextFactory.cs
- InputScopeManager.cs
- SimpleBitVector32.cs
- DataGridRelationshipRow.cs
- DataException.cs
- HttpModulesSection.cs
- WebErrorHandler.cs
- SortExpressionBuilder.cs
- PrintPreviewControl.cs
- ellipse.cs
- IisTraceListener.cs
- XslCompiledTransform.cs
- CompiledXpathExpr.cs
- CodeDomLoader.cs
- PathFigure.cs
- DbConnectionFactory.cs
- SecUtil.cs
- DbProviderFactoriesConfigurationHandler.cs
- HttpCachePolicy.cs
- _NtlmClient.cs
- XmlBinaryReader.cs
- GlyphRunDrawing.cs
- Tablet.cs
- DetailsViewRow.cs
- StyleCollection.cs
- LocalizableAttribute.cs
- ClrPerspective.cs
- DbLambda.cs
- BaseParaClient.cs
- Button.cs
- ToolboxDataAttribute.cs
- TargetConverter.cs
- ProviderMetadata.cs
- VirtualPathProvider.cs
- RawMouseInputReport.cs
- QilInvokeEarlyBound.cs
- BaseParser.cs
- StackSpiller.cs
- SeekStoryboard.cs
- EventArgs.cs
- EventMappingSettings.cs
- Icon.cs
- HttpListenerElement.cs
- ConnectionsZoneDesigner.cs
- Group.cs
- ExecutionEngineException.cs
- QueryContinueDragEventArgs.cs
- NonParentingControl.cs
- HtmlInputHidden.cs
- ConfigXmlReader.cs
- ApplicationProxyInternal.cs
- ContentPresenter.cs
- ObjectResult.cs
- XamlToRtfParser.cs
- DataGridViewTextBoxColumn.cs
- ThemeableAttribute.cs
- ContractsBCL.cs
- GeneralTransform3DCollection.cs
- FreezableOperations.cs
- TypeUsage.cs
- DataGridViewElement.cs
- Transform3D.cs
- altserialization.cs
- SettingsPropertyIsReadOnlyException.cs
- CompilerInfo.cs
- GridPatternIdentifiers.cs
- InteropAutomationProvider.cs
- Vector3DCollection.cs
- TempFiles.cs
- DigestTraceRecordHelper.cs
- LocationUpdates.cs
- PartitionerQueryOperator.cs
- SupportingTokenProviderSpecification.cs
- ArithmeticException.cs
- AutomationElementCollection.cs
- ObjectItemCollection.cs
- FixedSOMTextRun.cs
- InstanceDataCollectionCollection.cs
- UnsignedPublishLicense.cs
- Light.cs
- ConfigXmlSignificantWhitespace.cs
- ExecutedRoutedEventArgs.cs
- Command.cs
- SqlLiftWhereClauses.cs
- FocusManager.cs
- VariableQuery.cs
- PerformanceCounter.cs
- CodeChecksumPragma.cs
- OperandQuery.cs
- DetailsViewActionList.cs
- DefaultIfEmptyQueryOperator.cs