Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / ErrorHandlingAcceptor.cs / 1 / ErrorHandlingAcceptor.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System; using System.ServiceModel; using System.ServiceModel.Channels; class ErrorHandlingAcceptor { readonly ChannelDispatcher dispatcher; readonly IListenerBinder binder; internal ErrorHandlingAcceptor(IListenerBinder binder, ChannelDispatcher dispatcher) { if (binder == null) { DiagnosticUtility.DebugAssert("binder is null"); } if (dispatcher == null) { DiagnosticUtility.DebugAssert("dispatcher is null"); } this.binder = binder; this.dispatcher = dispatcher; } internal void Close() { try { this.binder.Listener.Close(); } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleError(e); } } void HandleError(Exception e) { if (this.dispatcher != null) { this.dispatcher.HandleError(e); } } void HandleErrorOrAbort(Exception e) { if ((this.dispatcher == null) || !this.dispatcher.HandleError(e)) { // We only stop if the listener faults. It is a bug // if the listener is in an invalid state and does not // fault. So there are no cases today where this aborts. } } internal bool TryAccept(TimeSpan timeout, out IChannelBinder channelBinder) { try { channelBinder = this.binder.Accept(timeout); if (channelBinder != null) { this.dispatcher.PendingChannels.Add(channelBinder.Channel); } return true; } catch (CommunicationObjectAbortedException) { channelBinder = null; return true; } catch (CommunicationObjectFaultedException) { channelBinder = null; return true; } catch (TimeoutException) { channelBinder = null; return false; } catch (CommunicationException e) { this.HandleError(e); channelBinder = null; return false; } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); channelBinder = null; return false; } } internal IAsyncResult BeginTryAccept(TimeSpan timeout, AsyncCallback callback, object state) { try { return this.binder.BeginAccept(timeout, callback, state); } catch (CommunicationObjectAbortedException) { return new ErrorHandlingCompletedAsyncResult(true, callback, state); } catch (CommunicationObjectFaultedException) { return new ErrorHandlingCompletedAsyncResult(true, callback, state); } catch (TimeoutException) { return new ErrorHandlingCompletedAsyncResult(false, callback, state); } catch (CommunicationException e) { this.HandleError(e); return new ErrorHandlingCompletedAsyncResult(false, callback, state); } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); return new ErrorHandlingCompletedAsyncResult(false, callback, state); } } internal bool EndTryAccept(IAsyncResult result, out IChannelBinder channelBinder) { ErrorHandlingCompletedAsyncResult handlerResult = result as ErrorHandlingCompletedAsyncResult; if (handlerResult != null) { channelBinder = null; return ErrorHandlingCompletedAsyncResult.End(handlerResult); } else { try { channelBinder = this.binder.EndAccept(result); if (channelBinder != null) { this.dispatcher.PendingChannels.Add(channelBinder.Channel); } return true; } catch (CommunicationObjectAbortedException) { channelBinder = null; return true; } catch (CommunicationObjectFaultedException) { channelBinder = null; return true; } catch (TimeoutException) { channelBinder = null; return false; } catch (CommunicationException e) { this.HandleError(e); channelBinder = null; return false; } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); channelBinder = null; return false; } } } internal void WaitForChannel() { try { this.binder.Listener.WaitForChannel(TimeSpan.MaxValue); } catch (CommunicationObjectAbortedException) { } catch (CommunicationObjectFaultedException) { } catch (CommunicationException e) { this.HandleError(e); } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); } } internal IAsyncResult BeginWaitForChannel(AsyncCallback callback, object state) { try { return this.binder.Listener.BeginWaitForChannel(TimeSpan.MaxValue, callback, state); } catch (CommunicationObjectAbortedException) { return new WaitCompletedAsyncResult(callback, state); } catch (CommunicationObjectFaultedException) { return new WaitCompletedAsyncResult(callback, state); } catch (CommunicationException e) { this.HandleError(e); return new WaitCompletedAsyncResult(callback, state); } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); return new WaitCompletedAsyncResult(callback, state); } } internal void EndWaitForChannel(IAsyncResult result) { WaitCompletedAsyncResult handlerResult = result as WaitCompletedAsyncResult; if (handlerResult != null) { WaitCompletedAsyncResult.End(handlerResult); } else { try { this.binder.Listener.EndWaitForChannel(result); } catch (CommunicationObjectAbortedException) { } catch (CommunicationObjectFaultedException) { } catch (CommunicationException e) { this.HandleError(e); } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); } } } class ErrorHandlingCompletedAsyncResult : TypedCompletedAsyncResult{ internal ErrorHandlingCompletedAsyncResult(bool data, AsyncCallback callback, object state) : base(data, callback, state) { } } class WaitCompletedAsyncResult : CompletedAsyncResult { internal WaitCompletedAsyncResult(AsyncCallback callback, object state) : base(callback, state) { } } } } // 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
- EventLogTraceListener.cs
- DataColumn.cs
- Int32Rect.cs
- RefreshPropertiesAttribute.cs
- DocumentGridContextMenu.cs
- SendKeys.cs
- FormViewModeEventArgs.cs
- CalendarDay.cs
- IdentityVerifier.cs
- EnvelopedPkcs7.cs
- DependencySource.cs
- WindowsAuthenticationEventArgs.cs
- UIntPtr.cs
- HttpModuleCollection.cs
- WinFormsComponentEditor.cs
- HierarchicalDataBoundControl.cs
- ObjectSet.cs
- ChangeProcessor.cs
- StrokeNodeOperations.cs
- CreateUserErrorEventArgs.cs
- RadioButton.cs
- PrimitiveXmlSerializers.cs
- FamilyTypeface.cs
- PartialArray.cs
- BitmapEffectInput.cs
- SiteMapProvider.cs
- errorpatternmatcher.cs
- FlowDocumentView.cs
- FixUp.cs
- EdmToObjectNamespaceMap.cs
- DispatcherProcessingDisabled.cs
- Transform3DGroup.cs
- Resources.Designer.cs
- ClientSession.cs
- AsyncOperation.cs
- sqlser.cs
- TerminatorSinks.cs
- FontFamily.cs
- SharedPerformanceCounter.cs
- ImageField.cs
- Property.cs
- ChangeConflicts.cs
- PersonalizationStateInfoCollection.cs
- ClientSettingsSection.cs
- DataServiceQueryProvider.cs
- BooleanProjectedSlot.cs
- ImageSource.cs
- Aes.cs
- RequiredFieldValidator.cs
- X509Certificate2Collection.cs
- ParameterBuilder.cs
- SettingsBase.cs
- MaterialCollection.cs
- DbProviderFactoriesConfigurationHandler.cs
- MarginsConverter.cs
- StrongNameUtility.cs
- TextLine.cs
- GeneralTransform.cs
- DeclarativeConditionsCollection.cs
- TextTreeUndoUnit.cs
- ObjectCache.cs
- SingleAnimationUsingKeyFrames.cs
- AppearanceEditorPart.cs
- StyleXamlParser.cs
- WebRequest.cs
- ProjectedWrapper.cs
- DataExchangeServiceBinder.cs
- TabPage.cs
- XNameConverter.cs
- CalendarKeyboardHelper.cs
- Ops.cs
- EventQueueState.cs
- StaticTextPointer.cs
- MessageVersion.cs
- AppModelKnownContentFactory.cs
- BrushValueSerializer.cs
- ListViewInsertedEventArgs.cs
- ResourceReferenceExpressionConverter.cs
- RequestQueryParser.cs
- ReverseQueryOperator.cs
- BasicCellRelation.cs
- sqlcontext.cs
- FixedLineResult.cs
- UseAttributeSetsAction.cs
- SessionPageStateSection.cs
- ClientSideQueueItem.cs
- CodeGenerator.cs
- LicFileLicenseProvider.cs
- ContainerFilterService.cs
- ExpressionBindingsDialog.cs
- ManagedWndProcTracker.cs
- DataRowView.cs
- UnsafeNativeMethodsMilCoreApi.cs
- IndexOutOfRangeException.cs
- TrackingLocation.cs
- EmptyControlCollection.cs
- Region.cs
- BindingWorker.cs
- PromptStyle.cs
- EditorZone.cs