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
- SortAction.cs
- AsymmetricSignatureFormatter.cs
- InterleavedZipPartStream.cs
- CursorConverter.cs
- NullableConverter.cs
- SpeechEvent.cs
- IconConverter.cs
- TreeNodeCollection.cs
- FixUp.cs
- AssemblyBuilder.cs
- WizardForm.cs
- DataExpression.cs
- TextBoxLine.cs
- BinaryConverter.cs
- SizeAnimation.cs
- HttpCookieCollection.cs
- TextFormatterHost.cs
- BaseProcessor.cs
- CachedFontFamily.cs
- TextDecorationLocationValidation.cs
- WindowInteractionStateTracker.cs
- ZipIORawDataFileBlock.cs
- Rectangle.cs
- ScaleTransform.cs
- Mouse.cs
- ModelItemDictionaryImpl.cs
- HtmlInputText.cs
- _NegotiateClient.cs
- TextBreakpoint.cs
- UrlMappingsSection.cs
- XmlWrappingWriter.cs
- Int64Animation.cs
- ScopedKnownTypes.cs
- BitmapEffectGeneralTransform.cs
- TokenFactoryFactory.cs
- CustomLineCap.cs
- updateconfighost.cs
- HttpPostClientProtocol.cs
- ConnectionStringsSection.cs
- DataSourceHelper.cs
- CustomLineCap.cs
- BitmapMetadataBlob.cs
- SqlCacheDependencyDatabase.cs
- PersistChildrenAttribute.cs
- Function.cs
- DataViewSettingCollection.cs
- UpdateCommand.cs
- WsatExtendedInformation.cs
- WorkflowServiceBehavior.cs
- EdmProperty.cs
- MailMessageEventArgs.cs
- SqlProvider.cs
- ResourceSetExpression.cs
- TextCompositionEventArgs.cs
- ParagraphResult.cs
- ReadOnlyDataSource.cs
- ButtonChrome.cs
- ClientTarget.cs
- NestedContainer.cs
- ListViewAutomationPeer.cs
- ToolStripRenderEventArgs.cs
- CharacterMetrics.cs
- ObjectIDGenerator.cs
- TypedElement.cs
- CodeGen.cs
- WindowInteractionStateTracker.cs
- TableRowGroup.cs
- DataContract.cs
- WorkflowQueue.cs
- PageAsyncTask.cs
- LazyTextWriterCreator.cs
- DataGridViewBindingCompleteEventArgs.cs
- DynamicRenderer.cs
- EntityViewGenerator.cs
- QilXmlWriter.cs
- DrawingCollection.cs
- PnrpPeerResolver.cs
- RuntimeConfigLKG.cs
- TextEffectResolver.cs
- StringStorage.cs
- DrawToolTipEventArgs.cs
- CheckBoxStandardAdapter.cs
- PingReply.cs
- DataGridViewHitTestInfo.cs
- Itemizer.cs
- IriParsingElement.cs
- SchemaTableColumn.cs
- URLString.cs
- HttpListenerContext.cs
- InlineObject.cs
- NamespaceQuery.cs
- RadioButtonPopupAdapter.cs
- GridProviderWrapper.cs
- TrackingStringDictionary.cs
- TransportBindingElementImporter.cs
- WindowInteropHelper.cs
- TaskFormBase.cs
- ParserHooks.cs
- XomlCompilerHelpers.cs
- Vector3DAnimationUsingKeyFrames.cs