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); } }