protected override bool OnTryCreateException(Message message, MessageFault fault, out Exception exception) { bool isSenderFault; bool isReceiverFault; FaultCode subCode; exception = null; if ((string.Compare(fault.Code.Namespace, this.version.Envelope.Namespace, StringComparison.Ordinal) == 0) && (string.Compare(fault.Code.Name, "MustUnderstand", StringComparison.Ordinal) == 0)) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } if (this.version.Envelope == EnvelopeVersion.Soap11) { isSenderFault = true; isReceiverFault = true; subCode = fault.Code; } else { isSenderFault = fault.Code.IsSenderFault; isReceiverFault = fault.Code.IsReceiverFault; subCode = fault.Code.SubCode; } if (subCode != null) { if (subCode.Namespace == null) { return false; } if (isSenderFault && (string.Compare(subCode.Namespace, this.version.Addressing.Namespace, StringComparison.Ordinal) == 0)) { if (string.Compare(subCode.Name, "ActionNotSupported", StringComparison.Ordinal) == 0) { exception = new ActionNotSupportedException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } if (string.Compare(subCode.Name, "DestinationUnreachable", StringComparison.Ordinal) == 0) { exception = new EndpointNotFoundException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } if (string.Compare(subCode.Name, "InvalidAddressingHeader", StringComparison.Ordinal) == 0) { if (((subCode.SubCode != null) && (string.Compare(subCode.SubCode.Namespace, this.version.Addressing.Namespace, StringComparison.Ordinal) == 0)) && (string.Compare(subCode.SubCode.Name, "InvalidCardinality", StringComparison.Ordinal) == 0)) { exception = new MessageHeaderException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text, true); return true; } } else if (this.version.Addressing == AddressingVersion.WSAddressing10) { if (string.Compare(subCode.Name, "MessageAddressingHeaderRequired", StringComparison.Ordinal) == 0) { exception = new MessageHeaderException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } if (string.Compare(subCode.Name, "InvalidAddressingHeader", StringComparison.Ordinal) == 0) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } } else { if (string.Compare(subCode.Name, "MessageInformationHeaderRequired", StringComparison.Ordinal) == 0) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } if (string.Compare(subCode.Name, "InvalidMessageInformationHeader", StringComparison.Ordinal) == 0) { exception = new ProtocolException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } } } if ((isReceiverFault && (string.Compare(subCode.Namespace, this.version.Addressing.Namespace, StringComparison.Ordinal) == 0)) && (string.Compare(subCode.Name, "EndpointUnavailable", StringComparison.Ordinal) == 0)) { exception = new ServerTooBusyException(fault.Reason.GetMatchingTranslation(CultureInfo.CurrentCulture).Text); return true; } } return false; }
protected override bool OnTryCreateException ( Message message, MessageFault fault, out Exception error) { if (message == null) throw new ArgumentNullException ("message"); if (fault == null) throw new ArgumentNullException ("fault"); error = null; FaultCode fc; if (version.Envelope.Equals (EnvelopeVersion.Soap11)) fc = fault.Code; else fc = fault.Code.SubCode; if (fc == null) return false; string msg = fault.Reason.GetMatchingTranslation ().Text; if (fc.Namespace == message.Version.Addressing.Namespace) { switch (fc.Name) { case "ActionNotSupported": error = new ActionNotSupportedException (msg); return true; case "DestinationUnreachable": error = new EndpointNotFoundException (msg); return true; } } return false; }