Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Dispatcher / XmlSerializerFaultFormatter.cs / 2 / XmlSerializerFaultFormatter.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
using System;
using System.Xml;
using System.Text;
using System.Reflection;
using System.Diagnostics;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Collections.Generic;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
namespace System.ServiceModel.Dispatcher
{
class XmlSerializerFaultFormatter : FaultFormatter
{
SynchronizedCollection xmlSerializerFaultContractInfos;
internal XmlSerializerFaultFormatter(Type[] detailTypes,
SynchronizedCollection xmlSerializerFaultContractInfos)
: base(detailTypes)
{
Initialize(xmlSerializerFaultContractInfos);
}
internal XmlSerializerFaultFormatter(SynchronizedCollection faultContractInfoCollection,
SynchronizedCollection xmlSerializerFaultContractInfos)
: base(faultContractInfoCollection)
{
Initialize(xmlSerializerFaultContractInfos);
}
void Initialize(SynchronizedCollection xmlSerializerFaultContractInfos)
{
if (xmlSerializerFaultContractInfos == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("xmlSerializerFaultContractInfos");
}
this.xmlSerializerFaultContractInfos = xmlSerializerFaultContractInfos;
}
protected override XmlObjectSerializer GetSerializer(Type detailType, string faultExceptionAction, out string action)
{
action = faultExceptionAction;
XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo faultInfo = null;
for (int i = 0; i < this.xmlSerializerFaultContractInfos.Count; i++)
{
if (this.xmlSerializerFaultContractInfos[i].FaultContractInfo.Detail == detailType)
{
faultInfo = this.xmlSerializerFaultContractInfos[i];
break;
}
}
if (faultInfo != null)
{
if (action == null)
action = faultInfo.FaultContractInfo.Action;
return faultInfo.Serializer;
}
else
return new XmlSerializerObjectSerializer(detailType);
}
protected override FaultException CreateFaultException(MessageFault messageFault, string action)
{
IList faultInfos;
if (action != null)
{
faultInfos = new List();
for (int i = 0; i < this.xmlSerializerFaultContractInfos.Count; i++)
{
if (this.xmlSerializerFaultContractInfos[i].FaultContractInfo.Action == action
|| this.xmlSerializerFaultContractInfos[i].FaultContractInfo.Action == MessageHeaders.WildcardAction)
{
faultInfos.Add(this.xmlSerializerFaultContractInfos[i]);
}
}
}
else
{
faultInfos = this.xmlSerializerFaultContractInfos;
}
Type detailType = null;
object detailObj = null;
for (int i = 0; i < faultInfos.Count; i++)
{
XmlSerializerOperationBehavior.Reflector.XmlSerializerFaultContractInfo faultInfo = faultInfos[i];
XmlDictionaryReader detailReader = messageFault.GetReaderAtDetailContents();
XmlObjectSerializer serializer = faultInfo.Serializer;
if (serializer.IsStartObject(detailReader))
{
detailType = faultInfo.FaultContractInfo.Detail;
try
{
detailObj = serializer.ReadObject(detailReader);
FaultException faultException = CreateFaultException(messageFault, action,
detailObj, detailType, detailReader);
if (faultException != null)
return faultException;
}
catch (SerializationException)
{
}
}
}
return new FaultException(messageFault, action);
}
}
}
// 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
- HtmlImage.cs
- BitmapEffectInputData.cs
- SerialReceived.cs
- EventDescriptorCollection.cs
- ClientFormsAuthenticationCredentials.cs
- ProgressBarBrushConverter.cs
- AppearanceEditorPart.cs
- _IPv4Address.cs
- SemanticResolver.cs
- TaskExceptionHolder.cs
- SourceChangedEventArgs.cs
- SpinLock.cs
- DependencyObjectType.cs
- AssemblyCacheEntry.cs
- MenuItem.cs
- SecurityAttributeGenerationHelper.cs
- TypePropertyEditor.cs
- SaveFileDialog.cs
- _CacheStreams.cs
- TargetConverter.cs
- WindowsSidIdentity.cs
- Int64Converter.cs
- SystemFonts.cs
- UnknownBitmapEncoder.cs
- InputManager.cs
- HttpProfileBase.cs
- EntityDescriptor.cs
- DynamicDiscoveryDocument.cs
- SqlIdentifier.cs
- IsolatedStorageException.cs
- DrawingContextDrawingContextWalker.cs
- ProxyAttribute.cs
- sqlcontext.cs
- ObjectSet.cs
- TextEditorTables.cs
- Thread.cs
- BlurEffect.cs
- Currency.cs
- ProcessManager.cs
- CommentEmitter.cs
- HttpCookiesSection.cs
- iisPickupDirectory.cs
- securitymgrsite.cs
- ArithmeticLiteral.cs
- XsltContext.cs
- sqlstateclientmanager.cs
- DataConnectionHelper.cs
- InvalidOleVariantTypeException.cs
- KeyConverter.cs
- ScriptManagerProxy.cs
- MenuAutomationPeer.cs
- DataStreamFromComStream.cs
- GeneralTransform.cs
- DataGridViewTextBoxCell.cs
- ResourceManagerWrapper.cs
- mediapermission.cs
- XmlSchemaInclude.cs
- FixedSOMPageElement.cs
- ReferencedAssemblyResolver.cs
- BamlCollectionHolder.cs
- ProfileSection.cs
- GraphicsContext.cs
- WriteFileContext.cs
- AggregateNode.cs
- DateTimeOffsetConverter.cs
- InheritanceUI.cs
- QilScopedVisitor.cs
- DataSetUtil.cs
- MatrixAnimationBase.cs
- CustomTypeDescriptor.cs
- EmptyEnumerable.cs
- Evaluator.cs
- UpdateProgress.cs
- TrustSection.cs
- mactripleDES.cs
- Guid.cs
- ZipIOLocalFileBlock.cs
- PageCodeDomTreeGenerator.cs
- ControlCachePolicy.cs
- GeneralTransform3D.cs
- ConditionalAttribute.cs
- DataColumnCollection.cs
- XPathAncestorIterator.cs
- AlphabetConverter.cs
- CharConverter.cs
- RtfControls.cs
- CacheEntry.cs
- GlyphShapingProperties.cs
- StaticResourceExtension.cs
- CrossAppDomainChannel.cs
- RegexCode.cs
- ContractNamespaceAttribute.cs
- DataColumnMapping.cs
- RijndaelManaged.cs
- CircleHotSpot.cs
- DataMemberConverter.cs
- ContentType.cs
- PageSetupDialog.cs
- ObjectDataSourceEventArgs.cs
- ToolboxComponentsCreatingEventArgs.cs