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
- Symbol.cs
- NetworkAddressChange.cs
- EndOfStreamException.cs
- AttachInfo.cs
- Choices.cs
- XPathMultyIterator.cs
- querybuilder.cs
- IsolatedStorage.cs
- Package.cs
- ClientRolePrincipal.cs
- DbModificationCommandTree.cs
- XamlPointCollectionSerializer.cs
- ToolStripDropDownButton.cs
- ThrowHelper.cs
- ResourceReader.cs
- Transform.cs
- LogStore.cs
- ExtensionQuery.cs
- SqlParameterizer.cs
- PlainXmlDeserializer.cs
- EntityContainerEmitter.cs
- XmlSchemaDatatype.cs
- GlobalizationAssembly.cs
- MonthCalendarDesigner.cs
- TextTreeTextElementNode.cs
- CollectionBase.cs
- GradientStop.cs
- StaticSiteMapProvider.cs
- PropertyTabChangedEvent.cs
- ContainerCodeDomSerializer.cs
- LinqTreeNodeEvaluator.cs
- XmlSerializerVersionAttribute.cs
- MetadataItemCollectionFactory.cs
- DictionaryTraceRecord.cs
- ToolZoneDesigner.cs
- followingsibling.cs
- WizardPanel.cs
- HandleExceptionArgs.cs
- NetStream.cs
- SignedInfo.cs
- M3DUtil.cs
- DrawingGroupDrawingContext.cs
- HistoryEventArgs.cs
- mediaeventargs.cs
- altserialization.cs
- AppModelKnownContentFactory.cs
- BitmapEffectInputConnector.cs
- DataRecordInfo.cs
- XmlTextAttribute.cs
- AnnotationHelper.cs
- ListenDesigner.cs
- DynamicRouteExpression.cs
- StringAttributeCollection.cs
- NullReferenceException.cs
- CombinedGeometry.cs
- RequestBringIntoViewEventArgs.cs
- StylusEventArgs.cs
- DbConnectionInternal.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- TransformValueSerializer.cs
- DataGridViewImageCell.cs
- PaperSize.cs
- ComponentChangingEvent.cs
- AnonymousIdentificationModule.cs
- IndentedWriter.cs
- ProgressBarRenderer.cs
- SubclassTypeValidator.cs
- TraceFilter.cs
- SqlAliasesReferenced.cs
- ExpandableObjectConverter.cs
- CodeTypeDeclaration.cs
- DataGridRow.cs
- VerificationAttribute.cs
- HttpListenerResponse.cs
- ApplicationInfo.cs
- SchemaImporterExtensionElement.cs
- Rotation3DAnimation.cs
- DataObjectMethodAttribute.cs
- EntryWrittenEventArgs.cs
- HttpChannelFactory.cs
- ToolStripContentPanel.cs
- HandleCollector.cs
- HostingEnvironmentWrapper.cs
- PolicyLevel.cs
- XPathChildIterator.cs
- Roles.cs
- QilUnary.cs
- WebPartVerbCollection.cs
- XmlSchemaSimpleContent.cs
- HttpListenerRequest.cs
- DataListItem.cs
- AllowedAudienceUriElement.cs
- ArrayTypeMismatchException.cs
- ResourceSet.cs
- MetadataFile.cs
- ConfigurationManagerInternal.cs
- ColumnMap.cs
- SizeConverter.cs
- ContentControl.cs
- ListCollectionView.cs