| File: System\ServiceModel\Channels\TransactionChannelFaultConverter.cs | Web Access |
| Project: ..\..\..\src\System.ServiceModel.Primitives\src\System.ServiceModel.Primitives.csproj (System.ServiceModel.Primitives) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; using FxResources.System.ServiceModel.Primitives; namespace System.ServiceModel.Channels { internal class TransactionChannelFaultConverter<TChannel> : FaultConverter where TChannel : class, IChannel { private TransactionChannel<TChannel> _channel; internal TransactionChannelFaultConverter(TransactionChannel<TChannel> channel) { _channel = channel; } protected override bool OnTryCreateException(Message message, MessageFault fault, out Exception exception) { if (message.Headers.Action == FaultCodeConstants.Actions.Transactions) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } if (fault.IsMustUnderstandFault) { MessageHeader header = _channel.Formatter.EmptyTransactionHeader; if (MessageFault.WasHeaderNotUnderstood(message.Headers, header.Name, header.Namespace)) { exception = new ProtocolException(SRP.Format(SRP.SFxTransactionHeaderNotUnderstood, header.Name, header.Namespace, _channel.Protocol)); return true; } } FaultConverter inner = _channel.GetInnerProperty<FaultConverter>(); if (inner != null) { return inner.TryCreateException(message, fault, out exception); } else { exception = null; return false; } } protected override bool OnTryCreateFaultMessage(Exception exception, out Message message) { FaultConverter inner = _channel.GetInnerProperty<FaultConverter>(); if (inner != null) { return inner.TryCreateFaultMessage(exception, out message); } else { message = null; return false; } } } }