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
{
Dictionary forwardTable = 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
- ExtendedPropertyCollection.cs
- UnknownBitmapEncoder.cs
- HScrollBar.cs
- DesignerView.xaml.cs
- NotifyInputEventArgs.cs
- SqlUserDefinedAggregateAttribute.cs
- ListViewDeletedEventArgs.cs
- PointConverter.cs
- MissingSatelliteAssemblyException.cs
- StringComparer.cs
- ExtensionQuery.cs
- AllMembershipCondition.cs
- TreeViewImageIndexConverter.cs
- IdleTimeoutMonitor.cs
- DependencyPropertyConverter.cs
- TextBoxAutoCompleteSourceConverter.cs
- SqlConnection.cs
- SimplePropertyEntry.cs
- GreenMethods.cs
- FontFaceLayoutInfo.cs
- UInt16.cs
- ArcSegment.cs
- XmlIncludeAttribute.cs
- EdmToObjectNamespaceMap.cs
- TrustLevel.cs
- ReferenceList.cs
- BeginEvent.cs
- CheckBoxFlatAdapter.cs
- InstanceKey.cs
- ChtmlImageAdapter.cs
- ExpressionCopier.cs
- TableLayoutRowStyleCollection.cs
- Options.cs
- UTF32Encoding.cs
- ResourceDisplayNameAttribute.cs
- PkcsMisc.cs
- AdornerLayer.cs
- SplashScreenNativeMethods.cs
- _BaseOverlappedAsyncResult.cs
- sqlstateclientmanager.cs
- SqlSupersetValidator.cs
- DataGridViewAdvancedBorderStyle.cs
- ArgumentException.cs
- DocumentXPathNavigator.cs
- FileLoadException.cs
- ReaderWriterLock.cs
- PermissionSetEnumerator.cs
- ScriptControl.cs
- AsymmetricKeyExchangeFormatter.cs
- Resources.Designer.cs
- Header.cs
- QilXmlReader.cs
- FontFamilyValueSerializer.cs
- Function.cs
- HttpPostProtocolReflector.cs
- PolyLineSegment.cs
- ThumbButtonInfoCollection.cs
- ReliableSession.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- DocumentManager.cs
- DataObjectSettingDataEventArgs.cs
- MessagePropertyDescription.cs
- ListenerConnectionDemuxer.cs
- ScrollProviderWrapper.cs
- WebHeaderCollection.cs
- CompositeCollection.cs
- XmlEventCache.cs
- XmlTextAttribute.cs
- NullableFloatSumAggregationOperator.cs
- BufferModesCollection.cs
- MenuItem.cs
- PropertyTabChangedEvent.cs
- ClrProviderManifest.cs
- DynamicResourceExtensionConverter.cs
- IResourceProvider.cs
- SamlAttribute.cs
- Object.cs
- IFlowDocumentViewer.cs
- ContractNamespaceAttribute.cs
- RSAPKCS1KeyExchangeFormatter.cs
- TypeGenericEnumerableViewSchema.cs
- _UriSyntax.cs
- WithParamAction.cs
- PersianCalendar.cs
- MsmqProcessProtocolHandler.cs
- RealizationDrawingContextWalker.cs
- DesignTimeVisibleAttribute.cs
- KeyBinding.cs
- EntityStoreSchemaGenerator.cs
- DefaultValueTypeConverter.cs
- FormViewUpdatedEventArgs.cs
- TraversalRequest.cs
- Activity.cs
- XmlDataImplementation.cs
- QilStrConcatenator.cs
- DbProviderFactory.cs
- ExternalException.cs
- WrappedIUnknown.cs
- HttpResponseMessageProperty.cs
- AQNBuilder.cs