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
- InputQueue.cs
- DeferredSelectedIndexReference.cs
- SerializationInfo.cs
- TextTreeUndoUnit.cs
- PenThreadWorker.cs
- ListDataBindEventArgs.cs
- DataSourceProvider.cs
- SubqueryTrackingVisitor.cs
- OptimizerPatterns.cs
- TraceSection.cs
- SqlDataSourceQuery.cs
- querybuilder.cs
- METAHEADER.cs
- PathFigureCollection.cs
- PerformanceCounterCategory.cs
- Blend.cs
- DigitalSignature.cs
- Sorting.cs
- TextComposition.cs
- Resources.Designer.cs
- SafeSecurityHandles.cs
- ExeContext.cs
- _UncName.cs
- WindowsScroll.cs
- X509SubjectKeyIdentifierClause.cs
- ClientScriptManager.cs
- TabControlEvent.cs
- DataTable.cs
- DataFieldConverter.cs
- CheckBoxField.cs
- XPathEmptyIterator.cs
- IPAddressCollection.cs
- RawKeyboardInputReport.cs
- unsafeIndexingFilterStream.cs
- Table.cs
- EdmToObjectNamespaceMap.cs
- TitleStyle.cs
- ADMembershipUser.cs
- OperationResponse.cs
- BamlReader.cs
- TreeNodeStyle.cs
- GregorianCalendarHelper.cs
- InkCanvasSelectionAdorner.cs
- MSAAWinEventWrap.cs
- EventItfInfo.cs
- SQLByte.cs
- DeleteBookmarkScope.cs
- WebPartZoneCollection.cs
- ImageSource.cs
- XPathDescendantIterator.cs
- PropertyKey.cs
- WindowsAuthenticationModule.cs
- NativeMethodsCLR.cs
- ResourceAttributes.cs
- ConstraintConverter.cs
- ScrollPatternIdentifiers.cs
- FormsAuthenticationUser.cs
- GridLengthConverter.cs
- ListManagerBindingsCollection.cs
- ChangeDirector.cs
- XXXInfos.cs
- WebPartConnectionsDisconnectVerb.cs
- XmlNullResolver.cs
- GroupQuery.cs
- DispatcherFrame.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- AutomationPattern.cs
- SQLInt64.cs
- MasterPageBuildProvider.cs
- GradientSpreadMethodValidation.cs
- SchemaImporterExtensionElement.cs
- EntityDataSourceDesignerHelper.cs
- StringExpressionSet.cs
- xdrvalidator.cs
- ByteStorage.cs
- SetUserLanguageRequest.cs
- OpCopier.cs
- GenericTypeParameterBuilder.cs
- ExceptionUtil.cs
- QueryLifecycle.cs
- oledbconnectionstring.cs
- MemberExpression.cs
- WebMethodAttribute.cs
- LinkClickEvent.cs
- RuntimeUtils.cs
- DataBindingCollection.cs
- DataGridParentRows.cs
- ContentDisposition.cs
- NotifyInputEventArgs.cs
- PropertyMetadata.cs
- LicenseException.cs
- ServicePoint.cs
- ScriptIgnoreAttribute.cs
- EventHandlersDesigner.cs
- CompatibleComparer.cs
- EventLog.cs
- DesignerTransaction.cs
- MatchingStyle.cs
- FrameworkElement.cs
- SynthesizerStateChangedEventArgs.cs