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
- ObjectDataProvider.cs
- NumericExpr.cs
- ConfigurationElement.cs
- SmiRequestExecutor.cs
- TreeNode.cs
- TemplateBindingExtensionConverter.cs
- RepeaterItem.cs
- EntityClientCacheKey.cs
- AppDomainProtocolHandler.cs
- BinaryUtilClasses.cs
- ChildTable.cs
- basenumberconverter.cs
- ChameleonKey.cs
- DispatchOperationRuntime.cs
- MatrixStack.cs
- LoadedEvent.cs
- ColorContextHelper.cs
- StorageAssociationTypeMapping.cs
- DrawingGroup.cs
- CryptoApi.cs
- XPathDocument.cs
- Processor.cs
- DynamicPropertyHolder.cs
- BasicKeyConstraint.cs
- Attributes.cs
- XmlElementAttribute.cs
- TrackBarRenderer.cs
- SqlConnectionStringBuilder.cs
- ComponentChangedEvent.cs
- Set.cs
- EncodingNLS.cs
- MorphHelper.cs
- SchemaExporter.cs
- SafeMemoryMappedViewHandle.cs
- StatusBarDrawItemEvent.cs
- DBBindings.cs
- ColorPalette.cs
- LoginUtil.cs
- FileUtil.cs
- EnumerableWrapperWeakToStrong.cs
- ConvertEvent.cs
- UnmanagedMemoryStream.cs
- DoneReceivingAsyncResult.cs
- NonSerializedAttribute.cs
- _HeaderInfo.cs
- NotifyIcon.cs
- CollectionType.cs
- shaper.cs
- RectConverter.cs
- ManagementObjectSearcher.cs
- DictionarySectionHandler.cs
- ProvidePropertyAttribute.cs
- RadioButtonBaseAdapter.cs
- DesignTimeTemplateParser.cs
- AuthorizationSection.cs
- LogicalExpressionEditor.cs
- Scalars.cs
- QilReference.cs
- DataGridViewTopRowAccessibleObject.cs
- MatchAllMessageFilter.cs
- TextReturnReader.cs
- SpAudioStreamWrapper.cs
- Panel.cs
- ToolStripHighContrastRenderer.cs
- StateManagedCollection.cs
- Tracking.cs
- HtmlElement.cs
- VolatileResourceManager.cs
- Freezable.cs
- FunctionImportElement.cs
- RightsManagementEncryptedStream.cs
- TableStyle.cs
- CaseInsensitiveComparer.cs
- BaseCodeDomTreeGenerator.cs
- InputReport.cs
- NoneExcludedImageIndexConverter.cs
- ListBindingConverter.cs
- Dictionary.cs
- DataGridViewCellConverter.cs
- UnsafeNetInfoNativeMethods.cs
- AudioException.cs
- CompilationUnit.cs
- SudsParser.cs
- LinearGradientBrush.cs
- RegexStringValidator.cs
- Material.cs
- ParameterCollection.cs
- TypeDependencyAttribute.cs
- CodeLabeledStatement.cs
- FormatSettings.cs
- HttpRequest.cs
- HotSpotCollectionEditor.cs
- OperandQuery.cs
- MultiSelectRootGridEntry.cs
- Ipv6Element.cs
- ImageProxy.cs
- EventDescriptor.cs
- DoubleConverter.cs
- Message.cs
- SerializationFieldInfo.cs