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
- AsymmetricKeyExchangeFormatter.cs
- ReliableOutputConnection.cs
- ExecutionContext.cs
- EntityClientCacheKey.cs
- Base64Decoder.cs
- COAUTHIDENTITY.cs
- Gdiplus.cs
- _NetworkingPerfCounters.cs
- FixedPageProcessor.cs
- MulticastNotSupportedException.cs
- WebDescriptionAttribute.cs
- Label.cs
- DataSourceHelper.cs
- ClientSession.cs
- TextTreeTextElementNode.cs
- ResourceReader.cs
- ScaleTransform.cs
- EntityKeyElement.cs
- DeclaredTypeValidatorAttribute.cs
- Durable.cs
- DataRecordObjectView.cs
- xmlsaver.cs
- AutomationPropertyInfo.cs
- ServiceContractGenerator.cs
- DeferredReference.cs
- DateTimePicker.cs
- WebSysDefaultValueAttribute.cs
- WeakRefEnumerator.cs
- Rotation3DAnimationUsingKeyFrames.cs
- HMACMD5.cs
- LinqDataSourceContextEventArgs.cs
- XmlSchemaValidationException.cs
- FunctionImportMapping.cs
- SqlCommandBuilder.cs
- StickyNoteContentControl.cs
- DbInsertCommandTree.cs
- DataRecord.cs
- InitializationEventAttribute.cs
- Parameter.cs
- Trigger.cs
- XmlSchemaType.cs
- XhtmlConformanceSection.cs
- _LocalDataStore.cs
- AccessViolationException.cs
- SmtpNetworkElement.cs
- SQLBoolean.cs
- CmsInterop.cs
- GridViewSortEventArgs.cs
- AlternateView.cs
- ExtensibleClassFactory.cs
- WebBrowser.cs
- SqlDataSource.cs
- FillBehavior.cs
- Calendar.cs
- GridEntry.cs
- XmlSchemaRedefine.cs
- AutomationPropertyInfo.cs
- TextTreeTextElementNode.cs
- DesignerCommandAdapter.cs
- TextBoxAutomationPeer.cs
- GcSettings.cs
- PointF.cs
- ClientCultureInfo.cs
- RootBrowserWindowProxy.cs
- Point4DValueSerializer.cs
- XPathBuilder.cs
- MouseDevice.cs
- WebHostScriptMappingsInstallComponent.cs
- CatalogPartCollection.cs
- Context.cs
- BamlTreeUpdater.cs
- DbMetaDataColumnNames.cs
- ProcessManager.cs
- BackgroundFormatInfo.cs
- ServiceMemoryGates.cs
- OrderedDictionary.cs
- TcpTransportManager.cs
- CreateRefExpr.cs
- IChannel.cs
- HtmlInputReset.cs
- ModuleBuilderData.cs
- StorageComplexTypeMapping.cs
- CacheRequest.cs
- DiscoveryEndpoint.cs
- StringFunctions.cs
- UInt16.cs
- AttributeProviderAttribute.cs
- ColorTransformHelper.cs
- RenderCapability.cs
- TextContainer.cs
- ServiceDeploymentInfo.cs
- UnsafeNativeMethodsCLR.cs
- Mouse.cs
- DataGridColumnCollection.cs
- FileLevelControlBuilderAttribute.cs
- SqlBulkCopyColumnMapping.cs
- XmlSchemaSet.cs
- TransactionProtocol.cs
- TypeSystem.cs
- MsmqHostedTransportManager.cs