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
- HtmlTernaryTree.cs
- SamlConstants.cs
- LinqToSqlWrapper.cs
- XMLSyntaxException.cs
- DataTableNewRowEvent.cs
- KeyProperty.cs
- KeyedCollection.cs
- Image.cs
- ErrorTolerantObjectWriter.cs
- HostingPreferredMapPath.cs
- SapiRecognizer.cs
- SiteMapNode.cs
- Image.cs
- Evidence.cs
- ReferenceCountedObject.cs
- HandlerBase.cs
- DefaultValidator.cs
- OrderByQueryOptionExpression.cs
- SequenceDesigner.cs
- Pair.cs
- Padding.cs
- RoleManagerSection.cs
- SqlGatherConsumedAliases.cs
- DropSource.cs
- SingleStorage.cs
- RelatedPropertyManager.cs
- ContentIterators.cs
- Add.cs
- HtmlControlPersistable.cs
- MatrixStack.cs
- DeleteIndexBinder.cs
- ActivityExecutionContextCollection.cs
- XmlSchemaObject.cs
- ColumnResizeAdorner.cs
- CmsInterop.cs
- PackagePart.cs
- TaskScheduler.cs
- Image.cs
- RuleSettingsCollection.cs
- XmlSchemaObject.cs
- Visitors.cs
- CatalogPartChrome.cs
- Preprocessor.cs
- XamlReaderHelper.cs
- XmlNamedNodeMap.cs
- WindowsClaimSet.cs
- DrawingServices.cs
- IdentityModelDictionary.cs
- IdentityHolder.cs
- _NetRes.cs
- SeparatorAutomationPeer.cs
- ParallelTimeline.cs
- Quaternion.cs
- IDReferencePropertyAttribute.cs
- HyperLinkStyle.cs
- Module.cs
- Page.cs
- SqlDependency.cs
- updateconfighost.cs
- AccessDataSource.cs
- DataPager.cs
- VectorKeyFrameCollection.cs
- CaseStatement.cs
- StyleBamlTreeBuilder.cs
- TraceHwndHost.cs
- Encoding.cs
- Point3DAnimationBase.cs
- PointAnimationUsingKeyFrames.cs
- TrackingServices.cs
- LinqDataSourceHelper.cs
- SerialStream.cs
- EditingCommands.cs
- StandardCommands.cs
- ConsumerConnectionPointCollection.cs
- VariableAction.cs
- WebBrowserNavigatedEventHandler.cs
- RegexMatch.cs
- Event.cs
- XmlReturnReader.cs
- JournalEntryListConverter.cs
- BaseTemplateBuildProvider.cs
- XmlReflectionImporter.cs
- Regex.cs
- ThreadPool.cs
- CalendarTable.cs
- Frame.cs
- XsltConvert.cs
- PageThemeCodeDomTreeGenerator.cs
- GPRECT.cs
- X509UI.cs
- EmptyCollection.cs
- WebPartDisplayModeEventArgs.cs
- ParameterModifier.cs
- GlyphRunDrawing.cs
- NativeRightsManagementAPIsStructures.cs
- FileLevelControlBuilderAttribute.cs
- StringPropertyBuilder.cs
- ComplexObject.cs
- NamedPipeHostedTransportConfiguration.cs
- FloaterParagraph.cs