Beispiel #1
0
        protected override bool OnTryCreateException(Message message, MessageFault fault, out Exception exception)
        {
            if (message.Headers.Action == "http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/transactions/fault")
            {
                exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text);
                return(true);
            }
            if (fault.IsMustUnderstandFault)
            {
                MessageHeader emptyTransactionHeader = this.channel.Formatter.EmptyTransactionHeader;
                if (MessageFault.WasHeaderNotUnderstood(message.Headers, emptyTransactionHeader.Name, emptyTransactionHeader.Namespace))
                {
                    exception = new ProtocolException(System.ServiceModel.SR.GetString("SFxTransactionHeaderNotUnderstood", new object[] { emptyTransactionHeader.Name, emptyTransactionHeader.Namespace, this.channel.Protocol }));
                    return(true);
                }
            }
            FaultConverter innerProperty = this.channel.GetInnerProperty <FaultConverter>();

            if (innerProperty != null)
            {
                return(innerProperty.TryCreateException(message, fault, out exception));
            }
            exception = null;
            return(false);
        }
        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 = this.channel.Formatter.EmptyTransactionHeader;
                if (MessageFault.WasHeaderNotUnderstood(message.Headers, header.Name, header.Namespace))
                {
                    exception = new ProtocolException(SR.GetString(SR.SFxTransactionHeaderNotUnderstood, header.Name, header.Namespace, this.channel.Protocol));
                    return(true);
                }
            }

            FaultConverter inner = this.channel.GetInnerProperty <FaultConverter>();

            if (inner != null)
            {
                return(inner.TryCreateException(message, fault, out exception));
            }
            else
            {
                exception = null;
                return(false);
            }
        }