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
- ApplicationException.cs
- _emptywebproxy.cs
- CharacterShapingProperties.cs
- DateTimeFormatInfo.cs
- ApplicationHost.cs
- InternalCache.cs
- MouseDevice.cs
- DataGridTextBoxColumn.cs
- TemplatedWizardStep.cs
- RegistryKey.cs
- ChangeNode.cs
- Version.cs
- SignatureDescription.cs
- InternalsVisibleToAttribute.cs
- SqlBulkCopyColumnMappingCollection.cs
- ByeMessageCD1.cs
- ColumnClickEvent.cs
- References.cs
- TextEmbeddedObject.cs
- CompilerError.cs
- TextOutput.cs
- SqlDataSourceConfigureSelectPanel.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- StatusBarPanelClickEvent.cs
- ActionFrame.cs
- NamespaceEmitter.cs
- StreamingContext.cs
- WsdlBuildProvider.cs
- TableItemPattern.cs
- SelectionPatternIdentifiers.cs
- Adorner.cs
- HtmlInputCheckBox.cs
- Trigger.cs
- TextTreeRootTextBlock.cs
- UrlPath.cs
- SeekStoryboard.cs
- ClientSettingsStore.cs
- AssemblyAttributesGoHere.cs
- TextViewBase.cs
- Sentence.cs
- ControlAdapter.cs
- CurrentChangingEventArgs.cs
- FileNotFoundException.cs
- SafeWaitHandle.cs
- PointF.cs
- MaskedTextProvider.cs
- MetabaseServerConfig.cs
- SpellerStatusTable.cs
- ServiceContractViewControl.Designer.cs
- SchemaCollectionPreprocessor.cs
- CompoundFileStreamReference.cs
- ISCIIEncoding.cs
- WebPartDisplayModeEventArgs.cs
- HtmlInputReset.cs
- HandleCollector.cs
- DataGridViewEditingControlShowingEventArgs.cs
- ActiveXContainer.cs
- DataGridViewTextBoxCell.cs
- SpeechRecognizer.cs
- XmlSortKeyAccumulator.cs
- ApplicationInfo.cs
- TextLineResult.cs
- Resources.Designer.cs
- ObjectComplexPropertyMapping.cs
- HierarchicalDataSourceControl.cs
- PrePrepareMethodAttribute.cs
- ElementAction.cs
- DrawingCollection.cs
- XmlSchemaSimpleContent.cs
- IPAddress.cs
- PortCache.cs
- WebSysDescriptionAttribute.cs
- XmlSchemaObjectCollection.cs
- XPathDocumentIterator.cs
- MenuStrip.cs
- VersionPair.cs
- AxisAngleRotation3D.cs
- ReachFixedDocumentSerializerAsync.cs
- IDQuery.cs
- ImplicitInputBrush.cs
- ConsoleTraceListener.cs
- Metadata.cs
- Effect.cs
- FontDialog.cs
- FileSecurity.cs
- XmlSerializerNamespaces.cs
- DataProtection.cs
- CacheForPrimitiveTypes.cs
- UrlPath.cs
- DesignerValidationSummaryAdapter.cs
- Function.cs
- SHA512Managed.cs
- CallbackException.cs
- DataGridViewRowPrePaintEventArgs.cs
- HeaderedContentControl.cs
- Timeline.cs
- BodyGlyph.cs
- UnknownBitmapEncoder.cs
- SortExpressionBuilder.cs
- ExpandSegment.cs