Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / ErrorBehavior.cs / 1 / ErrorBehavior.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Dispatcher
{
using System;
using System.ServiceModel.Channels;
using System.ServiceModel;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.ServiceModel.Diagnostics;
class ErrorBehavior
{
IErrorHandler[] handlers;
bool debug;
bool isOnServer;
MessageVersion messageVersion;
internal ErrorBehavior(ChannelDispatcher channelDispatcher)
{
this.handlers = EmptyArray.ToArray(channelDispatcher.ErrorHandlers);
this.debug = channelDispatcher.IncludeExceptionDetailInFaults;
this.isOnServer = channelDispatcher.IsOnServer;
this.messageVersion = channelDispatcher.MessageVersion;
}
void InitializeFault(ref MessageRpc rpc)
{
Exception error = rpc.Error;
FaultException fault = error as FaultException;
if (fault != null)
{
string action;
MessageFault messageFault = rpc.Operation.FaultFormatter.Serialize(fault, out action);
if (action == null)
action = rpc.RequestVersion.Addressing.DefaultFaultAction;
if (messageFault != null)
rpc.FaultInfo.Fault = Message.CreateMessage(rpc.RequestVersion, messageFault, action);
}
}
internal IErrorHandler[] Handlers
{
get
{
return handlers;
}
}
internal void ProvideMessageFault(ref MessageRpc rpc)
{
if (rpc.Error != null)
{
ProvideMessageFaultCore(ref rpc);
}
}
void ProvideMessageFaultCore(ref MessageRpc rpc)
{
if (this.messageVersion != rpc.RequestVersion)
{
DiagnosticUtility.DebugAssert("System.ServiceModel.Dispatcher.ErrorBehavior.ProvideMessageFaultCore(): (this.messageVersion != rpc.RequestVersion)");
}
this.InitializeFault(ref rpc);
this.ProvideFault(rpc.Error, rpc.Channel.GetProperty(), ref rpc.FaultInfo);
this.ProvideMessageFaultCoreCoda(ref rpc);
}
void ProvideFaultOfLastResort(Exception error, ref ErrorHandlerFaultInfo faultInfo)
{
if (faultInfo.Fault == null)
{
FaultCode code = new FaultCode(FaultCodeConstants.Codes.InternalServiceFault, FaultCodeConstants.Namespaces.NetDispatch);
code = FaultCode.CreateReceiverFaultCode(code);
string action = FaultCodeConstants.Actions.NetDispatcher;
MessageFault fault;
if (this.debug)
{
faultInfo.DefaultFaultAction = action;
fault = MessageFault.CreateFault(code, new FaultReason(error.Message), new ExceptionDetail(error));
}
else
{
string reason = this.isOnServer ? SR.GetString(SR.SFxInternalServerError) : SR.GetString(SR.SFxInternalCallbackError);
fault = MessageFault.CreateFault(code, new FaultReason(reason));
}
faultInfo.IsConsideredUnhandled = true;
faultInfo.Fault = Message.CreateMessage(this.messageVersion, fault, action);
}
}
void ProvideMessageFaultCoreCoda(ref MessageRpc rpc)
{
if (rpc.FaultInfo.Fault.Headers.Action == null)
{
rpc.FaultInfo.Fault.Headers.Action = rpc.RequestVersion.Addressing.DefaultFaultAction;
}
rpc.Reply = rpc.FaultInfo.Fault;
}
internal void ProvideOnlyFaultOfLastResort(ref MessageRpc rpc)
{
this.ProvideFaultOfLastResort(rpc.Error, ref rpc.FaultInfo);
this.ProvideMessageFaultCoreCoda(ref rpc);
}
internal void ProvideFault(Exception e, FaultConverter faultConverter, ref ErrorHandlerFaultInfo faultInfo)
{
ProvideWellKnownFault(e, faultConverter, ref faultInfo);
for (int i=0; i
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DeclaredTypeValidatorAttribute.cs
- DataGrid.cs
- SimplePropertyEntry.cs
- SystemWebSectionGroup.cs
- DelegatingChannelListener.cs
- StringFunctions.cs
- TemplatedMailWebEventProvider.cs
- PageSetupDialog.cs
- DesignerCommandAdapter.cs
- PersonalizationState.cs
- DocumentPageView.cs
- Axis.cs
- LocalizationCodeDomSerializer.cs
- CommandBinding.cs
- Atom10FormatterFactory.cs
- TraceContextEventArgs.cs
- EntryPointNotFoundException.cs
- BindingExpressionBase.cs
- FieldTemplateUserControl.cs
- RotateTransform.cs
- RedirectionProxy.cs
- SqlConnectionStringBuilder.cs
- EventProviderBase.cs
- TypeTypeConverter.cs
- WebPartConnectionsCancelVerb.cs
- TabItem.cs
- ActivityStatusChangeEventArgs.cs
- Encoding.cs
- TableProvider.cs
- AssemblyInfo.cs
- ResXBuildProvider.cs
- Ray3DHitTestResult.cs
- CodeDirectoryCompiler.cs
- WindowsScrollBarBits.cs
- TreeNodeClickEventArgs.cs
- UriTemplateClientFormatter.cs
- PackageDigitalSignature.cs
- ClassHandlersStore.cs
- ControlPersister.cs
- XmlSchemaValidator.cs
- GetIsBrowserClientRequest.cs
- RSAOAEPKeyExchangeFormatter.cs
- ConsoleKeyInfo.cs
- TextEditorCopyPaste.cs
- SqlInternalConnectionSmi.cs
- WebHeaderCollection.cs
- GenericRootAutomationPeer.cs
- ToolStripArrowRenderEventArgs.cs
- CollectionsUtil.cs
- PassportAuthenticationModule.cs
- AlternationConverter.cs
- HebrewNumber.cs
- BamlLocalizationDictionary.cs
- Facet.cs
- HttpCookieCollection.cs
- QilName.cs
- Formatter.cs
- StructuredProperty.cs
- SqlCacheDependencySection.cs
- ObjectDataSourceMethodEventArgs.cs
- SoapMessage.cs
- HybridObjectCache.cs
- RemoteWebConfigurationHostServer.cs
- UnmanagedBitmapWrapper.cs
- FrameworkContentElementAutomationPeer.cs
- RowSpanVector.cs
- TypeUnloadedException.cs
- ObjectItemLoadingSessionData.cs
- HelpEvent.cs
- LongCountAggregationOperator.cs
- DataColumn.cs
- SqlBooleanizer.cs
- ConfigurationElementCollection.cs
- AssemblyHelper.cs
- StylusPointDescription.cs
- SharedStatics.cs
- TwoPhaseCommit.cs
- QueryCacheEntry.cs
- HashAlgorithm.cs
- UserControlAutomationPeer.cs
- InstanceBehavior.cs
- RolePrincipal.cs
- CustomCategoryAttribute.cs
- EntityCommand.cs
- TrackingMemoryStreamFactory.cs
- DataGridViewElement.cs
- UpdateEventArgs.cs
- ProfilePropertyMetadata.cs
- MemberAccessException.cs
- _NtlmClient.cs
- StrongNameSignatureInformation.cs
- ProxyGenerationError.cs
- ProxyHwnd.cs
- RegexCode.cs
- ModelItemImpl.cs
- ProviderManager.cs
- SectionUpdates.cs
- SettingsBindableAttribute.cs
- DocumentViewerHelper.cs
- CodeDomSerializerBase.cs