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
- DataGridViewToolTip.cs
- Socket.cs
- WebPart.cs
- ToolStripItemEventArgs.cs
- ExpressionEditorAttribute.cs
- RpcAsyncResult.cs
- HtmlInputImage.cs
- DataServiceProcessingPipelineEventArgs.cs
- StreamResourceInfo.cs
- DataConnectionHelper.cs
- VScrollProperties.cs
- SQLDecimalStorage.cs
- ByeOperationCD1AsyncResult.cs
- Debug.cs
- ProjectionNode.cs
- Frame.cs
- HttpCapabilitiesEvaluator.cs
- TextRunCacheImp.cs
- ListView.cs
- ObjectHelper.cs
- ToolStripDropDownItem.cs
- DynamicFilterExpression.cs
- InstanceData.cs
- SortFieldComparer.cs
- TextEditorTables.cs
- StringAttributeCollection.cs
- KnownTypeAttribute.cs
- GridEntry.cs
- StructuralType.cs
- ProcessHostMapPath.cs
- PrimaryKeyTypeConverter.cs
- GlyphsSerializer.cs
- AtlasWeb.Designer.cs
- ReferencedAssembly.cs
- IPEndPointCollection.cs
- IgnoreSection.cs
- SqlRemoveConstantOrderBy.cs
- CryptoApi.cs
- SqlExpander.cs
- SurrogateSelector.cs
- PropertyDescriptorComparer.cs
- AsymmetricAlgorithm.cs
- CallInfo.cs
- Command.cs
- UnionCqlBlock.cs
- DefaultShape.cs
- CriticalExceptions.cs
- SqlConnectionPoolProviderInfo.cs
- XmlSerializationWriter.cs
- ToolboxItem.cs
- WizardStepBase.cs
- ScrollItemProviderWrapper.cs
- Stroke2.cs
- NotifyInputEventArgs.cs
- SQLDecimalStorage.cs
- TranslateTransform.cs
- SmtpCommands.cs
- HandlerBase.cs
- Guid.cs
- CompleteWizardStep.cs
- DesignerAutoFormat.cs
- TypeForwardedToAttribute.cs
- PerformanceCounterPermission.cs
- GenericPrincipal.cs
- ApplyTemplatesAction.cs
- ReadOnlyAttribute.cs
- PeerCollaboration.cs
- IIS7WorkerRequest.cs
- Pool.cs
- Pool.cs
- ListenerPerfCounters.cs
- FactoryGenerator.cs
- RuleSettings.cs
- AutomationEventArgs.cs
- EdmComplexPropertyAttribute.cs
- DeferredTextReference.cs
- HMAC.cs
- StandardCommands.cs
- ListItemCollection.cs
- BitmapPalettes.cs
- UserMapPath.cs
- HttpValueCollection.cs
- ThemeDirectoryCompiler.cs
- PlatformNotSupportedException.cs
- CoTaskMemUnicodeSafeHandle.cs
- StoreContentChangedEventArgs.cs
- VerifyHashRequest.cs
- DictionaryBase.cs
- SoapClientProtocol.cs
- MSAAWinEventWrap.cs
- _NestedSingleAsyncResult.cs
- ToolStripSplitStackLayout.cs
- Metadata.cs
- NavigationHelper.cs
- SimpleHandlerBuildProvider.cs
- AsyncOperationManager.cs
- CuspData.cs
- HttpRequestTraceRecord.cs
- ExpressionEditorAttribute.cs
- DLinqColumnProvider.cs