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
- Underline.cs
- ToolboxDataAttribute.cs
- Paragraph.cs
- ThousandthOfEmRealPoints.cs
- DispatchWrapper.cs
- ActiveXContainer.cs
- TcpStreams.cs
- SerializationAttributes.cs
- SafeArrayRankMismatchException.cs
- ProcessInputEventArgs.cs
- WebConfigurationHostFileChange.cs
- NotImplementedException.cs
- RegularExpressionValidator.cs
- CultureMapper.cs
- ImageResources.Designer.cs
- TypeSystemProvider.cs
- FileDialog_Vista_Interop.cs
- ExtendedTransformFactory.cs
- _UriSyntax.cs
- PinnedBufferMemoryStream.cs
- LookupBindingPropertiesAttribute.cs
- SplitContainer.cs
- FontStretchConverter.cs
- XPathBuilder.cs
- WmlMobileTextWriter.cs
- SettingsPropertyWrongTypeException.cs
- SoapAttributeAttribute.cs
- TypeBinaryExpression.cs
- DataGridTextBoxColumn.cs
- LookupNode.cs
- LinkUtilities.cs
- SafeFileMapViewHandle.cs
- EditableLabelControl.cs
- TextDecorationCollection.cs
- TcpDuplicateContext.cs
- Base64Encoding.cs
- EncryptedData.cs
- FeatureSupport.cs
- XPathNodeHelper.cs
- SqlClientFactory.cs
- ProtocolsConfigurationHandler.cs
- MetabaseServerConfig.cs
- DbConnectionClosed.cs
- Accessible.cs
- DataBindingHandlerAttribute.cs
- DriveInfo.cs
- XPathPatternParser.cs
- PnrpPeerResolver.cs
- RC2CryptoServiceProvider.cs
- BuildProvider.cs
- HMACRIPEMD160.cs
- HotSpot.cs
- ObjRef.cs
- DefaultParameterValueAttribute.cs
- SpotLight.cs
- CryptoApi.cs
- CommonProperties.cs
- Vars.cs
- BamlTreeMap.cs
- PageThemeParser.cs
- TouchesOverProperty.cs
- SchemaCollectionCompiler.cs
- TextBoxAutomationPeer.cs
- LingerOption.cs
- IndexingContentUnit.cs
- PropertyGridEditorPart.cs
- TextProperties.cs
- BStrWrapper.cs
- WebPartDescription.cs
- DoubleLinkList.cs
- VBCodeProvider.cs
- Point3DCollection.cs
- TextServicesHost.cs
- ObjectDataSourceFilteringEventArgs.cs
- DefaultBindingPropertyAttribute.cs
- VersionedStreamOwner.cs
- FigureParaClient.cs
- GPPOINTF.cs
- DataSourceCacheDurationConverter.cs
- RequestResizeEvent.cs
- HtmlShimManager.cs
- ConfigXmlComment.cs
- SystemThemeKey.cs
- StackOverflowException.cs
- ReceiveActivityDesignerTheme.cs
- MergeLocalizationDirectives.cs
- BatchParser.cs
- DoubleAnimationBase.cs
- ConfigXmlWhitespace.cs
- Reference.cs
- ApplicationBuildProvider.cs
- NotImplementedException.cs
- UIPermission.cs
- TextSpan.cs
- FunctionQuery.cs
- PointLight.cs
- StrongNamePublicKeyBlob.cs
- BufferBuilder.cs
- SettingsSection.cs
- AdPostCacheSubstitution.cs