Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / NamedPipeConnectionPool.cs / 1 / NamedPipeConnectionPool.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.Collections.ObjectModel; using System.Net; using System.Net.Sockets; using System.IO; class NamedPipeConnectionPoolRegistry : ConnectionPoolRegistry { public NamedPipeConnectionPoolRegistry() : base() { } protected override ConnectionPool CreatePool(IConnectionOrientedTransportChannelFactorySettings settings) { return new NamedPipeConnectionPool(settings); } class NamedPipeConnectionPool : ConnectionPool { PipeNameCache pipeNameCache; public NamedPipeConnectionPool(IConnectionOrientedTransportChannelFactorySettings settings) : base(settings, TimeSpan.MaxValue) { this.pipeNameCache = new PipeNameCache(); } protected override EndpointConnectionPool CreateEndpointConnectionPool(string key) { return new NamedPipeEndpointConnectionPool(this, key); } protected override string GetPoolKey(EndpointAddress address, Uri via) { string result; lock (base.ThisLock) { if (!this.pipeNameCache.TryGetValue(via, out result)) { result = PipeConnectionInitiator.GetPipeName(via); this.pipeNameCache.Add(via, result); } } return result; } protected override void OnClosed() { base.OnClosed(); this.pipeNameCache.Clear(); } void OnConnectionAborted(string pipeName) { // the underlying pipe name may have changed; purge the old one from the cache lock (base.ThisLock) { this.pipeNameCache.Purge(pipeName); } } protected class NamedPipeEndpointConnectionPool : IdleTimeoutEndpointConnectionPool { NamedPipeConnectionPool parent; public NamedPipeEndpointConnectionPool(NamedPipeConnectionPool parent, string key) : base(parent, key) { this.parent = parent; } protected override void OnConnectionAborted() { parent.OnConnectionAborted(this.Key); } } } // not thread-safe class PipeNameCache { DictionaryforwardTable = new Dictionary (); Dictionary > reverseTable = new Dictionary >(); public void Add(Uri uri, string pipeName) { this.forwardTable.Add(uri, pipeName); ICollection uris; if (!this.reverseTable.TryGetValue(pipeName, out uris)) { uris = new Collection (); this.reverseTable.Add(pipeName, uris); } uris.Add(uri); } public void Clear() { this.forwardTable.Clear(); this.reverseTable.Clear(); } public void Purge(string pipeName) { ICollection uris; if (this.reverseTable.TryGetValue(pipeName, out uris)) { this.reverseTable.Remove(pipeName); foreach (Uri uri in uris) { this.forwardTable.Remove(uri); } } } public bool TryGetValue(Uri uri, out string pipeName) { return this.forwardTable.TryGetValue(uri, out pipeName); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ProxyGenerator.cs
- CompilerGlobalScopeAttribute.cs
- Debug.cs
- DmlSqlGenerator.cs
- SafeLibraryHandle.cs
- input.cs
- WindowPattern.cs
- ConsumerConnectionPointCollection.cs
- ProgressBarAutomationPeer.cs
- ThreadExceptionEvent.cs
- WsatConfiguration.cs
- ListViewItem.cs
- Msec.cs
- AttributeCollection.cs
- DataGridItemCollection.cs
- FixedSOMElement.cs
- PageTheme.cs
- DesignerValidatorAdapter.cs
- DefaultHttpHandler.cs
- MimeMapping.cs
- ToolboxComponentsCreatingEventArgs.cs
- Transform.cs
- LabelEditEvent.cs
- Ray3DHitTestResult.cs
- Iis7Helper.cs
- ReflectionTypeLoadException.cs
- FieldNameLookup.cs
- QilPatternFactory.cs
- DataSetMappper.cs
- CmsUtils.cs
- DynamicRenderer.cs
- IIS7WorkerRequest.cs
- CustomPopupPlacement.cs
- HTTPNotFoundHandler.cs
- ApplicationException.cs
- OuterGlowBitmapEffect.cs
- Thickness.cs
- WindowsGraphics2.cs
- TextEffect.cs
- UnsafeNativeMethods.cs
- _NetRes.cs
- WindowAutomationPeer.cs
- XmlSchemaObjectTable.cs
- RegexRunner.cs
- ListBoxChrome.cs
- ToolbarAUtomationPeer.cs
- ClientSettingsProvider.cs
- Matrix3DStack.cs
- ArraySortHelper.cs
- KeyPullup.cs
- LateBoundBitmapDecoder.cs
- DataGridViewSelectedCellCollection.cs
- ItemDragEvent.cs
- MultipleFilterMatchesException.cs
- sqlser.cs
- EmptyQuery.cs
- _DigestClient.cs
- DesignerToolboxInfo.cs
- SqlDataReaderSmi.cs
- SelectionHighlightInfo.cs
- ImageFormatConverter.cs
- CountdownEvent.cs
- KnownColorTable.cs
- TableLayoutSettings.cs
- AdornedElementPlaceholder.cs
- ComponentEditorPage.cs
- StringBlob.cs
- HeaderCollection.cs
- NativeMethods.cs
- BulletedListEventArgs.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- XD.cs
- ImpersonationContext.cs
- WithParamAction.cs
- BaseProcessor.cs
- RegisteredDisposeScript.cs
- ModelPerspective.cs
- EdmConstants.cs
- PropertyGridEditorPart.cs
- DeclarativeCatalogPart.cs
- PasswordBoxAutomationPeer.cs
- PatternMatchRules.cs
- ImageDrawing.cs
- ErrorTableItemStyle.cs
- codemethodreferenceexpression.cs
- ActivationArguments.cs
- RoleService.cs
- CustomCredentialPolicy.cs
- OdbcRowUpdatingEvent.cs
- AuthorizationRule.cs
- DataGridHeaderBorder.cs
- ListViewUpdateEventArgs.cs
- arc.cs
- FullTextState.cs
- SplineKeyFrames.cs
- Matrix3DConverter.cs
- HttpPostLocalhostServerProtocol.cs
- ManagementBaseObject.cs
- QuaternionKeyFrameCollection.cs
- CodeArgumentReferenceExpression.cs