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
- PointIndependentAnimationStorage.cs
- TypeConverterAttribute.cs
- MetadataSource.cs
- MapPathBasedVirtualPathProvider.cs
- SqlDataSourceFilteringEventArgs.cs
- CatalogZone.cs
- Array.cs
- SwitchCase.cs
- Substitution.cs
- NonParentingControl.cs
- bidPrivateBase.cs
- StoreItemCollection.cs
- ValidatedControlConverter.cs
- GridItemProviderWrapper.cs
- DocumentAutomationPeer.cs
- SymLanguageVendor.cs
- DocumentXmlWriter.cs
- FixUpCollection.cs
- ShellProvider.cs
- ConfigXmlWhitespace.cs
- StringKeyFrameCollection.cs
- DeferredTextReference.cs
- DecimalStorage.cs
- EntitySetBaseCollection.cs
- AdornerDecorator.cs
- HitTestDrawingContextWalker.cs
- InterleavedZipPartStream.cs
- ErrorHandlerFaultInfo.cs
- IIS7UserPrincipal.cs
- SoapReflectionImporter.cs
- NotFiniteNumberException.cs
- TextEndOfSegment.cs
- DefaultBindingPropertyAttribute.cs
- EmptyElement.cs
- BooleanExpr.cs
- ByteAnimationBase.cs
- CharacterString.cs
- RelationshipSet.cs
- AudioFormatConverter.cs
- Polyline.cs
- CheckBoxField.cs
- AccessControlList.cs
- ComboBox.cs
- SimpleHandlerFactory.cs
- DataBoundControl.cs
- MinMaxParagraphWidth.cs
- BamlLocalizer.cs
- IteratorFilter.cs
- GridViewRowEventArgs.cs
- CharacterBuffer.cs
- RuleElement.cs
- StrongNameUtility.cs
- StoreAnnotationsMap.cs
- GradientStop.cs
- SignerInfo.cs
- RTLAwareMessageBox.cs
- ApplicationActivator.cs
- FileSystemWatcher.cs
- DbgCompiler.cs
- ZipIORawDataFileBlock.cs
- TypedReference.cs
- ServiceModelConfigurationSection.cs
- COM2ExtendedTypeConverter.cs
- CharUnicodeInfo.cs
- DataSourceCacheDurationConverter.cs
- EntityDataSourceChangedEventArgs.cs
- BCLDebug.cs
- ReadOnlyHierarchicalDataSource.cs
- TransformerInfo.cs
- PeerEndPoint.cs
- errorpatternmatcher.cs
- AutomationElement.cs
- DataSourceXmlTextReader.cs
- CompleteWizardStep.cs
- ScriptResourceInfo.cs
- Model3DCollection.cs
- InlineUIContainer.cs
- VersionedStreamOwner.cs
- TypeRestriction.cs
- WindowsGraphicsCacheManager.cs
- XmlExtensionFunction.cs
- RouteItem.cs
- AspProxy.cs
- RewritingPass.cs
- RegionInfo.cs
- COM2FontConverter.cs
- BufferModeSettings.cs
- ActivityBuilderHelper.cs
- EntityAdapter.cs
- HttpGetProtocolImporter.cs
- DataGridViewToolTip.cs
- CompareValidator.cs
- MembershipValidatePasswordEventArgs.cs
- RadioButtonList.cs
- DataGridViewCheckBoxColumn.cs
- StyleCollectionEditor.cs
- TemplateControl.cs
- GorillaCodec.cs
- StorageFunctionMapping.cs
- X509CertificateCollection.cs