Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / ErrorHandlingReceiver.cs / 1 / ErrorHandlingReceiver.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Dispatcher { using System; using System.ServiceModel; using System.ServiceModel.Channels; class ErrorHandlingReceiver { ChannelDispatcher dispatcher; IChannelBinder binder; internal ErrorHandlingReceiver(IChannelBinder binder, ChannelDispatcher dispatcher) { this.binder = binder; this.dispatcher = dispatcher; } internal void Close() { try { this.binder.Channel.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)) { if (this.binder.HasSession) { this.binder.Abort(); } } } internal bool TryReceive(TimeSpan timeout, out RequestContext requestContext) { try { return this.binder.TryReceive(timeout, out requestContext); } catch (CommunicationObjectAbortedException) { requestContext = null; return true; } catch (CommunicationObjectFaultedException) { requestContext = null; return true; } catch (CommunicationException e) { this.HandleError(e); requestContext = null; return false; } catch (TimeoutException e) { this.HandleError(e); requestContext = null; return false; } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); requestContext = null; return false; } } internal IAsyncResult BeginTryReceive(TimeSpan timeout, AsyncCallback callback, object state) { try { return this.binder.BeginTryReceive(timeout, callback, state); } catch (CommunicationObjectAbortedException) { return new ErrorHandlingCompletedAsyncResult(true, callback, state); } catch (CommunicationObjectFaultedException) { return new ErrorHandlingCompletedAsyncResult(true, callback, state); } catch (CommunicationException e) { this.HandleError(e); return new ErrorHandlingCompletedAsyncResult(false, callback, state); } catch (TimeoutException 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 EndTryReceive(IAsyncResult result, out RequestContext requestContext) { ErrorHandlingCompletedAsyncResult handlerResult = result as ErrorHandlingCompletedAsyncResult; if (handlerResult != null) { requestContext = null; return ErrorHandlingCompletedAsyncResult.End(handlerResult); } else { try { return this.binder.EndTryReceive(result, out requestContext); } catch (CommunicationObjectAbortedException) { requestContext = null; return true; } catch (CommunicationObjectFaultedException) { requestContext = null; return true; } catch (CommunicationException e) { this.HandleError(e); requestContext = null; return false; } catch (TimeoutException e) { this.HandleError(e); requestContext = null; return false; } catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } this.HandleErrorOrAbort(e); requestContext = null; return false; } } } internal void WaitForMessage() { try { this.binder.WaitForMessage(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 BeginWaitForMessage(AsyncCallback callback, object state) { try { return this.binder.BeginWaitForMessage(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 EndWaitForMessage(IAsyncResult result) { WaitCompletedAsyncResult handlerResult = result as WaitCompletedAsyncResult; if (handlerResult != null) { WaitCompletedAsyncResult.End(handlerResult); } else { try { this.binder.EndWaitForMessage(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
- Utility.cs
- DataControlField.cs
- _ListenerResponseStream.cs
- GenericIdentity.cs
- ProcessModule.cs
- MergeEnumerator.cs
- dtdvalidator.cs
- ReflectPropertyDescriptor.cs
- ReadOnlyActivityGlyph.cs
- InputScopeAttribute.cs
- AnimationStorage.cs
- CodeExpressionStatement.cs
- _HeaderInfo.cs
- ToolStripDropTargetManager.cs
- HttpModulesSection.cs
- LineBreak.cs
- Control.cs
- HighlightComponent.cs
- DbDataAdapter.cs
- RelativeSource.cs
- DbDataReader.cs
- InfoCardProofToken.cs
- CompositeActivityTypeDescriptor.cs
- Misc.cs
- OperationInvokerTrace.cs
- SystemWebCachingSectionGroup.cs
- CSharpCodeProvider.cs
- ProcessRequestArgs.cs
- DataColumnMappingCollection.cs
- Int32EqualityComparer.cs
- Debug.cs
- XmlSerializerFaultFormatter.cs
- FloaterBaseParagraph.cs
- DictionaryManager.cs
- ColumnHeaderConverter.cs
- MenuStrip.cs
- SqlReferenceCollection.cs
- ServiceModelEnumValidator.cs
- XmlResolver.cs
- XPathScanner.cs
- MachineKeySection.cs
- ExpandedWrapper.cs
- InvariantComparer.cs
- DataErrorValidationRule.cs
- DrawingCollection.cs
- LocatorPartList.cs
- EdmPropertyAttribute.cs
- Vector3DConverter.cs
- RSAOAEPKeyExchangeFormatter.cs
- RecordsAffectedEventArgs.cs
- BuildProviderAppliesToAttribute.cs
- ListViewItem.cs
- ColorInterpolationModeValidation.cs
- WriteFileContext.cs
- XmlRawWriter.cs
- CatalogPartCollection.cs
- URL.cs
- Vector3DKeyFrameCollection.cs
- FixedTextPointer.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- StrongNameUtility.cs
- OperationExecutionFault.cs
- BindingGroup.cs
- MetafileHeaderWmf.cs
- Geometry3D.cs
- DiscriminatorMap.cs
- ColorContextHelper.cs
- FtpWebRequest.cs
- ZoneLinkButton.cs
- AssemblyAttributesGoHere.cs
- XPathSelectionIterator.cs
- EntityDataSourceChangingEventArgs.cs
- RectIndependentAnimationStorage.cs
- FontSource.cs
- FragmentQueryProcessor.cs
- COM2PropertyBuilderUITypeEditor.cs
- RepeatEnumerable.cs
- StringToken.cs
- GatewayDefinition.cs
- EmptyStringExpandableObjectConverter.cs
- ButtonField.cs
- InstanceLockQueryResult.cs
- DbProviderFactoriesConfigurationHandler.cs
- XamlStream.cs
- MediaElement.cs
- XPathAncestorIterator.cs
- Profiler.cs
- GridViewDeletedEventArgs.cs
- EventItfInfo.cs
- MessageSmuggler.cs
- DigestComparer.cs
- _DisconnectOverlappedAsyncResult.cs
- CompoundFileDeflateTransform.cs
- ObjectKeyFrameCollection.cs
- ThrowHelper.cs
- HtmlInputHidden.cs
- MaterialGroup.cs
- TextTreeText.cs
- AsyncOperationManager.cs
- CellParagraph.cs