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
- BasicKeyConstraint.cs
- PerformanceCounterPermission.cs
- SqlClientFactory.cs
- WpfPayload.cs
- DataGridViewImageCell.cs
- DataSourceProvider.cs
- CodeTypeConstructor.cs
- RegexInterpreter.cs
- TaiwanLunisolarCalendar.cs
- Connection.cs
- RectValueSerializer.cs
- StringReader.cs
- BatchParser.cs
- RelAssertionDirectKeyIdentifierClause.cs
- HttpProfileGroupBase.cs
- MailAddressCollection.cs
- NavigationExpr.cs
- XmlQueryCardinality.cs
- WebMessageEncoderFactory.cs
- Trigger.cs
- WebPartEditorCancelVerb.cs
- Convert.cs
- FileCodeGroup.cs
- SplineQuaternionKeyFrame.cs
- UnsignedPublishLicense.cs
- SQLBinaryStorage.cs
- RijndaelManagedTransform.cs
- DbConnectionInternal.cs
- EntityConnectionStringBuilder.cs
- HtmlTableRow.cs
- ToolStrip.cs
- PerspectiveCamera.cs
- CryptoHandle.cs
- QueryOpeningEnumerator.cs
- MULTI_QI.cs
- WebUtil.cs
- XmlnsDefinitionAttribute.cs
- XmlSerializerVersionAttribute.cs
- SecurityContext.cs
- ListBox.cs
- RegexWriter.cs
- HashMembershipCondition.cs
- ContentType.cs
- DeviceSpecificChoice.cs
- DateTimeConverter2.cs
- OptimisticConcurrencyException.cs
- HttpStreamXmlDictionaryReader.cs
- ServiceHttpModule.cs
- UdpDiscoveryEndpointElement.cs
- WsdlEndpointConversionContext.cs
- ExecutionEngineException.cs
- IdleTimeoutMonitor.cs
- SmtpDigestAuthenticationModule.cs
- TypeSystem.cs
- CompilerGlobalScopeAttribute.cs
- DetailsViewModeEventArgs.cs
- Polyline.cs
- DirectionalLight.cs
- EntityDataSourceSelectedEventArgs.cs
- CollectionTypeElement.cs
- ResumeStoryboard.cs
- ISessionStateStore.cs
- WebSysDescriptionAttribute.cs
- DataMemberFieldEditor.cs
- InitializationEventAttribute.cs
- Effect.cs
- WebPartDisplayModeCollection.cs
- CompositeControlDesigner.cs
- DataKey.cs
- InternalConfigHost.cs
- TypeCollectionDesigner.xaml.cs
- ControlHelper.cs
- LayoutEditorPart.cs
- TextEffect.cs
- DataColumnSelectionConverter.cs
- BitmapEffectInputData.cs
- VisualTreeUtils.cs
- WindowsSolidBrush.cs
- SchemaImporter.cs
- UIntPtr.cs
- Propagator.JoinPropagator.cs
- ImportCatalogPart.cs
- SelectionChangedEventArgs.cs
- Icon.cs
- DiscoveryEndpoint.cs
- IIS7UserPrincipal.cs
- ConsumerConnectionPointCollection.cs
- SymbolMethod.cs
- KnownTypesProvider.cs
- WebPartConnectionCollection.cs
- RecordManager.cs
- BitmapFrameDecode.cs
- XmlStringTable.cs
- ValidationEventArgs.cs
- SynchronizationScope.cs
- ToolStripSplitButton.cs
- RevocationPoint.cs
- Figure.cs
- OracleParameter.cs
- SoapIncludeAttribute.cs