Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / FaultConverter.cs / 1 / FaultConverter.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System; using System.Globalization; public abstract class FaultConverter { public static FaultConverter GetDefaultFaultConverter(MessageVersion version) { return new DefaultFaultConverter(version); } protected abstract bool OnTryCreateException(Message message, MessageFault fault, out Exception exception); protected abstract bool OnTryCreateFaultMessage(Exception exception, out Message message); public bool TryCreateException(Message message, MessageFault fault, out Exception exception) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("message"); } if (fault == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("fault"); } bool created = this.OnTryCreateException(message, fault, out exception); if (created) { if (exception == null) { string text = SR.GetString(SR.FaultConverterDidNotCreateException, this.GetType().Name); Exception error = new InvalidOperationException(text); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(error); } } else { if (exception != null) { string text = SR.GetString(SR.FaultConverterCreatedException, this.GetType().Name); Exception error = new InvalidOperationException(text, exception); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(error); } } return created; } public bool TryCreateFaultMessage(Exception exception, out Message message) { bool created = this.OnTryCreateFaultMessage(exception, out message); if (created) { if (message == null) { string text = SR.GetString(SR.FaultConverterDidNotCreateFaultMessage, this.GetType().Name); Exception error = new InvalidOperationException(text); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(error); } } else { if (message != null) { string text = SR.GetString(SR.FaultConverterCreatedFaultMessage, this.GetType().Name); Exception error = new InvalidOperationException(text); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(error); } } return created; } class DefaultFaultConverter : FaultConverter { MessageVersion version; internal DefaultFaultConverter(MessageVersion version) { this.version = version; } protected override bool OnTryCreateException(Message message, MessageFault fault, out Exception exception) { exception = null; // SOAP MustUnderstand if (string.Compare(fault.Code.Namespace, version.Envelope.Namespace, StringComparison.Ordinal) == 0 && string.Compare(fault.Code.Name, MessageStrings.MustUnderstandFault, StringComparison.Ordinal) == 0) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } bool checkSender; bool checkReceiver; FaultCode code; if (version.Envelope == EnvelopeVersion.Soap11) { checkSender = true; checkReceiver = true; code = fault.Code; } else { checkSender = fault.Code.IsSenderFault; checkReceiver = fault.Code.IsReceiverFault; code = fault.Code.SubCode; } if (code == null) { return false; } if (code.Namespace == null) { return false; } if (checkSender) { // WS-Addressing if (string.Compare(code.Namespace, version.Addressing.Namespace, StringComparison.Ordinal) == 0) { if (string.Compare(code.Name, AddressingStrings.ActionNotSupported, StringComparison.Ordinal) == 0) { exception = new ActionNotSupportedException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } else if (string.Compare(code.Name, AddressingStrings.DestinationUnreachable, StringComparison.Ordinal) == 0) { exception = new EndpointNotFoundException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } else if (string.Compare(code.Name, Addressing10Strings.InvalidAddressingHeader, StringComparison.Ordinal) == 0) { if (code.SubCode != null && string.Compare(code.SubCode.Namespace, version.Addressing.Namespace, StringComparison.Ordinal) == 0 && string.Compare(code.SubCode.Name, Addressing10Strings.InvalidCardinality, StringComparison.Ordinal) == 0) { exception = new MessageHeaderException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text, true); return true; } } else if (version.Addressing == AddressingVersion.WSAddressing10) { if (string.Compare(code.Name, Addressing10Strings.MessageAddressingHeaderRequired, StringComparison.Ordinal) == 0) { exception = new MessageHeaderException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } else if (string.Compare(code.Name, Addressing10Strings.InvalidAddressingHeader, StringComparison.Ordinal) == 0) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } } else { if (string.Compare(code.Name, Addressing200408Strings.MessageInformationHeaderRequired, StringComparison.Ordinal) == 0) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } else if (string.Compare(code.Name, Addressing200408Strings.InvalidMessageInformationHeader, StringComparison.Ordinal) == 0) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } } } } if (checkReceiver) { // WS-Addressing if (string.Compare(code.Namespace, version.Addressing.Namespace, StringComparison.Ordinal) == 0) { if (string.Compare(code.Name, AddressingStrings.EndpointUnavailable, StringComparison.Ordinal) == 0) { exception = new ServerTooBusyException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } } } return false; } protected override bool OnTryCreateFaultMessage(Exception exception, out Message message) { // WSA if (this.version.Addressing == AddressingVersion.WSAddressing10) { if (exception is MessageHeaderException) { MessageHeaderException mhe = exception as MessageHeaderException; if (mhe.HeaderNamespace == AddressingVersion.WSAddressing10.Namespace) { message = mhe.ProvideFault(this.version); return true; } } else if (exception is ActionMismatchAddressingException) { ActionMismatchAddressingException amae = exception as ActionMismatchAddressingException; message = amae.ProvideFault(this.version); return true; } } if (this.version.Addressing != AddressingVersion.None) { if (exception is ActionNotSupportedException) { ActionNotSupportedException anse = exception as ActionNotSupportedException; message = anse.ProvideFault(this.version); return true; } } // SOAP if (exception is MustUnderstandSoapException) { MustUnderstandSoapException muse = exception as MustUnderstandSoapException; message = muse.ProvideFault(this.version); return true; } message = null; return false; } } } } // 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
- ColorInterpolationModeValidation.cs
- DiffuseMaterial.cs
- Pool.cs
- versioninfo.cs
- HostTimeoutsElement.cs
- DataGridViewCellFormattingEventArgs.cs
- InkCollectionBehavior.cs
- HwndSourceParameters.cs
- XmlDataFileEditor.cs
- BuildTopDownAttribute.cs
- LingerOption.cs
- BoundColumn.cs
- VariableAction.cs
- WebBrowser.cs
- SqlEnums.cs
- HandlerMappingMemo.cs
- VisualStateChangedEventArgs.cs
- ThreadStateException.cs
- IsolatedStorageFileStream.cs
- XsltCompileContext.cs
- DataGridColumnStyleMappingNameEditor.cs
- TemplateComponentConnector.cs
- UrlMappingsSection.cs
- ConnectionProviderAttribute.cs
- StringCollectionMarkupSerializer.cs
- NameValueFileSectionHandler.cs
- ConnectionPoint.cs
- ArgumentOutOfRangeException.cs
- SubpageParagraph.cs
- DesignTimeParseData.cs
- PlainXmlDeserializer.cs
- CodeMemberMethod.cs
- ContractUtils.cs
- SortDescriptionCollection.cs
- ConnectionManagementElement.cs
- UnsafeNativeMethodsTablet.cs
- DataBindEngine.cs
- ConstrainedDataObject.cs
- WebPartCollection.cs
- PropertyItemInternal.cs
- DataGridViewSelectedColumnCollection.cs
- InputProviderSite.cs
- ScriptControlManager.cs
- ShortcutKeysEditor.cs
- InvalidOleVariantTypeException.cs
- WebSysDescriptionAttribute.cs
- Nullable.cs
- TypeDelegator.cs
- PartialClassGenerationTaskInternal.cs
- ToolStripContainer.cs
- DiffuseMaterial.cs
- UserControl.cs
- AssemblyAttributesGoHere.cs
- FixedBufferAttribute.cs
- filewebrequest.cs
- ForceCopyBuildProvider.cs
- XmlSchemaIdentityConstraint.cs
- RestClientProxyHandler.cs
- BackgroundWorker.cs
- _NegoState.cs
- JsonSerializer.cs
- SpellerStatusTable.cs
- TreeNode.cs
- InputProcessorProfilesLoader.cs
- ScrollChrome.cs
- SeekableMessageNavigator.cs
- PropertyGridDesigner.cs
- DataGridState.cs
- ListControl.cs
- HtmlElementEventArgs.cs
- OrderedHashRepartitionEnumerator.cs
- PropertyPathWorker.cs
- FramingChannels.cs
- GradientBrush.cs
- TypeDelegator.cs
- XPathNode.cs
- DynamicDocumentPaginator.cs
- NumberAction.cs
- FillErrorEventArgs.cs
- odbcmetadatafactory.cs
- DataGridColumnHeader.cs
- SiteMapNodeCollection.cs
- MSG.cs
- CommonRemoteMemoryBlock.cs
- SafeCryptContextHandle.cs
- TokenBasedSet.cs
- DetailsViewUpdateEventArgs.cs
- ActivitySurrogate.cs
- BitConverter.cs
- DataFormats.cs
- RandomDelaySendsAsyncResult.cs
- CreateParams.cs
- OrderedDictionary.cs
- MetafileHeaderWmf.cs
- TaskFormBase.cs
- Utils.cs
- CleanUpVirtualizedItemEventArgs.cs
- PropertyFilter.cs
- UnconditionalPolicy.cs
- DragDropHelper.cs