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
- DoubleUtil.cs
- WebPartVerb.cs
- Bookmark.cs
- XmlAttributeOverrides.cs
- XmlSchemaIdentityConstraint.cs
- CellIdBoolean.cs
- DiagnosticsConfiguration.cs
- MessagePropertyDescription.cs
- CrossAppDomainChannel.cs
- SynchronizationContext.cs
- SiteIdentityPermission.cs
- SaveFileDialog.cs
- FormViewRow.cs
- SystemColorTracker.cs
- UriTemplateTable.cs
- RefreshResponseInfo.cs
- DataBindingValueUIHandler.cs
- BitSet.cs
- WindowsHyperlink.cs
- EventLogEntry.cs
- AppSettingsSection.cs
- SqlClientPermission.cs
- Opcode.cs
- DataServiceResponse.cs
- XmlReaderDelegator.cs
- Debug.cs
- WebServiceMethodData.cs
- ProxyWebPart.cs
- MorphHelper.cs
- DataGridCell.cs
- Calendar.cs
- Process.cs
- SqlInfoMessageEvent.cs
- FileDialogCustomPlace.cs
- ForAllOperator.cs
- LinkUtilities.cs
- SqlDataSourceCache.cs
- SourceFilter.cs
- ShellProvider.cs
- BoolExpression.cs
- UiaCoreApi.cs
- ServiceMemoryGates.cs
- XmlAttributeOverrides.cs
- WebContentFormatHelper.cs
- DllHostedComPlusServiceHost.cs
- IxmlLineInfo.cs
- XmlSortKey.cs
- SiteMapSection.cs
- NativeMethods.cs
- SchemaMapping.cs
- CommandBindingCollection.cs
- _HelperAsyncResults.cs
- SmiEventSink.cs
- View.cs
- SelectionWordBreaker.cs
- ExceptionValidationRule.cs
- DbConnectionPoolGroup.cs
- TextServicesDisplayAttribute.cs
- shaper.cs
- UserMapPath.cs
- ReferencedType.cs
- ClientTargetSection.cs
- ToolStripItemRenderEventArgs.cs
- MessageFilterException.cs
- PointLight.cs
- PropertyEmitterBase.cs
- TrackingServices.cs
- FrameworkElement.cs
- SafeFileMappingHandle.cs
- SecurityState.cs
- LocationInfo.cs
- DataGridItemCollection.cs
- TextBlock.cs
- SkewTransform.cs
- DateTimeAutomationPeer.cs
- TextLine.cs
- XmlEntityReference.cs
- OverflowException.cs
- DbProviderSpecificTypePropertyAttribute.cs
- PerspectiveCamera.cs
- ConnectivityStatus.cs
- SByte.cs
- TextSelection.cs
- ByteStack.cs
- SmtpClient.cs
- FormCollection.cs
- DataGridCell.cs
- DbProviderSpecificTypePropertyAttribute.cs
- GraphicsPath.cs
- ResXResourceSet.cs
- AnimationStorage.cs
- RectValueSerializer.cs
- HtmlHistory.cs
- MediaElementAutomationPeer.cs
- COM2IProvidePropertyBuilderHandler.cs
- Block.cs
- SettingsSection.cs
- HtmlSelect.cs
- DataGridPageChangedEventArgs.cs
- ContainerActivationHelper.cs