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 { SynchronizedCollectionxmlSerializerFaultContractInfos; 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
- XmlStreamedByteStreamReader.cs
- ReadOnlyCollection.cs
- ThaiBuddhistCalendar.cs
- XmlRootAttribute.cs
- StreamSecurityUpgradeAcceptorBase.cs
- FocusTracker.cs
- SerializationTrace.cs
- Menu.cs
- ProcessStartInfo.cs
- SynchronizingStream.cs
- PackWebRequestFactory.cs
- Emitter.cs
- XmlSchemaObject.cs
- DataContractAttribute.cs
- WebPartDisplayMode.cs
- IntMinMaxAggregationOperator.cs
- CodeArrayCreateExpression.cs
- TableDetailsCollection.cs
- GroupQuery.cs
- GAC.cs
- PaintEvent.cs
- LineProperties.cs
- SocketElement.cs
- IDQuery.cs
- WSTrustDec2005.cs
- ApplicationHost.cs
- IChannel.cs
- BuildResult.cs
- HtmlValidatorAdapter.cs
- WebPartCatalogAddVerb.cs
- CompilerResults.cs
- XMLDiffLoader.cs
- RowUpdatedEventArgs.cs
- CompilerGeneratedAttribute.cs
- PointLight.cs
- TextSpanModifier.cs
- Int32CollectionValueSerializer.cs
- SmiConnection.cs
- Util.cs
- LinkButton.cs
- ClientTarget.cs
- CryptoConfig.cs
- HostingEnvironmentSection.cs
- ArrayTypeMismatchException.cs
- PersonalizationDictionary.cs
- Exceptions.cs
- SqlNode.cs
- MenuAdapter.cs
- DbMetaDataFactory.cs
- WebPartEditorOkVerb.cs
- OracleRowUpdatedEventArgs.cs
- ConversionValidationRule.cs
- WinInet.cs
- DockAndAnchorLayout.cs
- PriorityQueue.cs
- _WebProxyDataBuilder.cs
- LabelEditEvent.cs
- HttpApplicationFactory.cs
- DesignerActionTextItem.cs
- Hex.cs
- TargetException.cs
- MediaElement.cs
- WinEventTracker.cs
- CheckBoxRenderer.cs
- WebPartConnectVerb.cs
- CultureTableRecord.cs
- CultureInfo.cs
- IisTraceWebEventProvider.cs
- PropertyFilterAttribute.cs
- DataTableTypeConverter.cs
- OptimizerPatterns.cs
- _ContextAwareResult.cs
- OneOf.cs
- ThemeDirectoryCompiler.cs
- FileDialog.cs
- AppearanceEditorPart.cs
- Int16.cs
- SettingsAttributeDictionary.cs
- PropertyAccessVisitor.cs
- DescendantQuery.cs
- WindowsListBox.cs
- SoapTypeAttribute.cs
- Pair.cs
- SimpleMailWebEventProvider.cs
- ObjectCache.cs
- HandlerBase.cs
- complextypematerializer.cs
- ForeignConstraint.cs
- ProgressBarBrushConverter.cs
- IpcClientManager.cs
- PointF.cs
- BaseTemplateCodeDomTreeGenerator.cs
- CustomValidator.cs
- XmlSerializationWriter.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- DataView.cs
- InsufficientMemoryException.cs
- ErrorProvider.cs
- TreeWalker.cs
- UInt16Converter.cs