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
- RedistVersionInfo.cs
- MarkupCompilePass2.cs
- WebControl.cs
- Image.cs
- CacheAxisQuery.cs
- SimpleHandlerBuildProvider.cs
- ProxyHwnd.cs
- ExtensionFile.cs
- SecurityDescriptor.cs
- cookie.cs
- brushes.cs
- SpotLight.cs
- EditorAttribute.cs
- ColumnMapTranslator.cs
- TableLayoutSettings.cs
- AccessibleObject.cs
- ClientUrlResolverWrapper.cs
- TreeViewImageKeyConverter.cs
- ImageDrawing.cs
- FormViewDeletedEventArgs.cs
- PtsHost.cs
- MembershipSection.cs
- TreePrinter.cs
- PresentationTraceSources.cs
- KeyFrames.cs
- BufferModesCollection.cs
- XsdCachingReader.cs
- PropertyGridEditorPart.cs
- HttpModuleAction.cs
- CellLabel.cs
- ObjectConverter.cs
- CheckBoxList.cs
- MediaContext.cs
- GeometryModel3D.cs
- Deflater.cs
- TableCell.cs
- LinearGradientBrush.cs
- PowerStatus.cs
- BamlCollectionHolder.cs
- RewritingSimplifier.cs
- ComponentManagerBroker.cs
- DbConnectionStringCommon.cs
- PackageRelationshipCollection.cs
- TextEncodedRawTextWriter.cs
- Certificate.cs
- Stream.cs
- ChtmlMobileTextWriter.cs
- OleDbFactory.cs
- Deflater.cs
- GraphicsContext.cs
- SolidColorBrush.cs
- DeclaredTypeElementCollection.cs
- DropDownButton.cs
- HttpHandlersSection.cs
- HttpInputStream.cs
- XPathMultyIterator.cs
- ReadOnlyTernaryTree.cs
- AdornerLayer.cs
- coordinator.cs
- ListBindingConverter.cs
- NamespaceEmitter.cs
- JsonFormatReaderGenerator.cs
- LinqDataSourceView.cs
- ManagementClass.cs
- UnsafeNativeMethods.cs
- WebPartEditorOkVerb.cs
- QueryContinueDragEventArgs.cs
- ResourcesGenerator.cs
- ConfigurationStrings.cs
- VectorCollectionConverter.cs
- ParseHttpDate.cs
- PropertyReferenceExtension.cs
- x509store.cs
- Rotation3DAnimationBase.cs
- SimpleMailWebEventProvider.cs
- IfAction.cs
- DocumentXmlWriter.cs
- SinglePageViewer.cs
- TextSyndicationContent.cs
- FontFamily.cs
- CursorConverter.cs
- SamlSerializer.cs
- Size3DConverter.cs
- KeysConverter.cs
- InvalidateEvent.cs
- TextTreeUndoUnit.cs
- XPathNode.cs
- DataControlCommands.cs
- IsolatedStorageException.cs
- HtmlInputSubmit.cs
- VerificationAttribute.cs
- MetaModel.cs
- ExtensionWindowHeader.cs
- TypeSource.cs
- SafeBuffer.cs
- StrongBox.cs
- ChannelSinkStacks.cs
- InvalidOleVariantTypeException.cs
- KnownTypesHelper.cs
- ComponentResourceKey.cs