Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / ChannelTracker.cs / 1 / ChannelTracker.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.ServiceModel; using System.Diagnostics; using System.IO; using System.Runtime.Serialization; using System.ServiceModel.Diagnostics; using System.Text; using System.Threading; using System.ServiceModel.Description; using System.Xml; ////// Track channels and (optionally) associated state /// class ChannelTracker: CommunicationObject where TChannel : IChannel where TState : class { Dictionary receivers; EventHandler onInnerChannelClosed; EventHandler onInnerChannelFaulted; public ChannelTracker() { this.receivers = new Dictionary (); this.onInnerChannelClosed = new EventHandler(OnInnerChannelClosed); this.onInnerChannelFaulted = new EventHandler(OnInnerChannelFaulted); } public void Add(TChannel channel, TState channelReceiver) { bool abortChannel = false; lock (this.receivers) { if (this.State != CommunicationState.Opened) { abortChannel = true; } else { this.receivers.Add(channel, channelReceiver); } } if (abortChannel) { channel.Abort(); } } public void PrepareChannel(TChannel channel) { channel.Faulted += this.onInnerChannelFaulted; channel.Closed += this.onInnerChannelClosed; } void OnInnerChannelFaulted(object sender, EventArgs e) { ((TChannel)sender).Abort(); } void OnInnerChannelClosed(object sender, EventArgs e) { // remove the channel from our tracking dictionary TChannel channel = (TChannel)sender; this.Remove(channel); channel.Faulted -= this.onInnerChannelFaulted; channel.Closed -= this.onInnerChannelClosed; } public bool Remove(TChannel channel) { lock (this.receivers) { return this.receivers.Remove(channel); } } TChannel[] GetChannels() { lock (this.receivers) { TChannel[] channels = new TChannel[this.receivers.Keys.Count]; this.receivers.Keys.CopyTo(channels, 0); this.receivers.Clear(); return channels; } } protected override void OnAbort() { TChannel[] channels = GetChannels(); for (int i = 0; i < channels.Length; i++) { channels[i].Abort(); } } protected override void OnClose(TimeSpan timeout) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); TChannel[] channels = GetChannels(); for (int i = 0; i < channels.Length; i++) { bool success = false; try { channels[i].Close(timeoutHelper.RemainingTime()); success = true; } catch (CommunicationException e) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Information); } } catch (TimeoutException e) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Information); } } finally { if (!success) { channels[i].Abort(); } } } } protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { TChannel[] channels = GetChannels(); List collection = new List (); for (int i = 0; i < channels.Length; i++) { collection.Add(channels[i]); } return new CloseCollectionAsyncResult(timeout, callback, state, collection); } protected override void OnEndClose(IAsyncResult result) { CloseCollectionAsyncResult.End(result); } protected override TimeSpan DefaultCloseTimeout { get { return ServiceDefaults.CloseTimeout; } } protected override TimeSpan DefaultOpenTimeout { get { return ServiceDefaults.OpenTimeout; } } protected override void OnOpen(TimeSpan timeout) { } protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state) { return new CompletedAsyncResult(callback, state); } protected override void OnEndOpen(IAsyncResult result) { CompletedAsyncResult.End(result); } } } // 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
- ShimAsPublicXamlType.cs
- listitem.cs
- EntityDataSourceWizardForm.cs
- ForeignKeyConstraint.cs
- SplayTreeNode.cs
- NavigatorOutput.cs
- NaturalLanguageHyphenator.cs
- HuffmanTree.cs
- SettingsPropertyValue.cs
- IntPtr.cs
- Point3DCollectionConverter.cs
- ScaleTransform3D.cs
- SqlDataSourceCommandEventArgs.cs
- LayoutUtils.cs
- CommentEmitter.cs
- ImmutableObjectAttribute.cs
- Compensate.cs
- SoapWriter.cs
- SharedStatics.cs
- HttpHandlersInstallComponent.cs
- SafeFileMapViewHandle.cs
- UnitySerializationHolder.cs
- DefaultClaimSet.cs
- DesignerVerbToolStripMenuItem.cs
- InputLanguageManager.cs
- SecurityChannelListener.cs
- BCLDebug.cs
- SplitterCancelEvent.cs
- TokenFactoryCredential.cs
- CodeTypeParameter.cs
- Drawing.cs
- BuildProviderAppliesToAttribute.cs
- SafeNativeMethods.cs
- OdbcErrorCollection.cs
- StorageMappingFragment.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- MultiView.cs
- BitmapEffectOutputConnector.cs
- EnvelopedSignatureTransform.cs
- CheckBoxPopupAdapter.cs
- MergablePropertyAttribute.cs
- WindowsListViewGroupSubsetLink.cs
- TCEAdapterGenerator.cs
- InstanceDataCollectionCollection.cs
- CorruptingExceptionCommon.cs
- JoinQueryOperator.cs
- DelegateArgument.cs
- BitmapFrameDecode.cs
- TypefaceMap.cs
- ToolStripSeparatorRenderEventArgs.cs
- TreeNodeStyleCollection.cs
- ImageAttributes.cs
- ObjectDataSourceStatusEventArgs.cs
- DataGridViewTextBoxEditingControl.cs
- WeakReferenceKey.cs
- GridViewEditEventArgs.cs
- DispatcherFrame.cs
- ToolStripButton.cs
- OpCellTreeNode.cs
- TextCharacters.cs
- TextPointerBase.cs
- PropertyGeneratedEventArgs.cs
- SplitterPanelDesigner.cs
- BitmapEffectDrawing.cs
- UInt64Converter.cs
- DataServiceQueryOfT.cs
- OleDbDataAdapter.cs
- WebServiceFaultDesigner.cs
- ValueUtilsSmi.cs
- ErrorLog.cs
- XpsFixedDocumentSequenceReaderWriter.cs
- Pkcs9Attribute.cs
- HtmlDocument.cs
- EdmRelationshipRoleAttribute.cs
- CancellableEnumerable.cs
- DesignerView.cs
- ClientSideProviderDescription.cs
- SqlNodeAnnotation.cs
- XmlParserContext.cs
- SiteMapProvider.cs
- XmlSerializerAssemblyAttribute.cs
- ValidationHelper.cs
- HttpRequestCacheValidator.cs
- OneOfConst.cs
- AutomationEventArgs.cs
- cookie.cs
- GridErrorDlg.cs
- UnmanagedBitmapWrapper.cs
- TypeLibConverter.cs
- SqlFormatter.cs
- TemplateControlBuildProvider.cs
- TabPage.cs
- InputEventArgs.cs
- HttpModuleActionCollection.cs
- XmlDictionary.cs
- WsdlParser.cs
- DbSourceParameterCollection.cs
- GeometryCollection.cs
- Point3DCollection.cs
- SqlInfoMessageEvent.cs