Wie Behandeln WCF-Fault Exception

Ich bin versuchen, um mehr Informationen über einen SOAP-Fehler in einer open-source-client-Anwendung. Das client-setup aufrufen "HandleFault" Wann immer es trifft auf alle SOAP-Fehler. Der Griff-Fehler-Methode ist unten dargestellt:

   public static void HandleFault(Message message) {
        MessageFault fault = MessageFault.CreateFault(message, Int32.MaxValue);
        throw System.ServiceModel.FaultException.CreateFault(fault,
            typeof(PermissionDeniedFault),
            typeof(EndpointUnavailable),
            typeof(InvalidRepresentation),
            typeof(UnwillingToPerformFault),
            typeof(CannotProcessFilter),
            typeof(AnonymousInteractionRequiredFault)
        );
    }

Hier ist ein Teil der SOAP-Fault, der übergeben wird als "Nachricht", wenn ich versuchen und etwas tun, wie das ändern eines Telefon-Nummer ungültiges format von der client.

  <s:Body u:Id="_2">
<Fault xmlns="http://www.w3.org/2003/05/soap-envelope">
  <Code>
    <Value>Sender</Value>
    <Subcode>
      <Value xmlns:a="http://schemas.xmlsoap.org/ws/2004/09/transfer">a:InvalidRepresentation</Value>
    </Subcode>
  </Code>
  <Reason>
    <Text xml:lang="en-US">The request message contains errors that prevent processing the request.</Text>
  </Reason>
  <Detail>
    <RepresentationFailures xmlns="http://schemas.microsoft.com/2006/11/ResourceManagement" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <AttributeRepresentationFailure>
        <AttributeType>OfficePhone</AttributeType>
        <AttributeValue>(123)456-7890</AttributeValue>
        <AttributeFailureCode>ValueViolatesRegularExpression</AttributeFailureCode>
        <AdditionalTextDetails>The specified attribute value does not satisfy the regular expression.</AdditionalTextDetails>
      </AttributeRepresentationFailure>
      <CorrelationId>11042dda-3ce9-4563-b59e-d1c1355819a4</CorrelationId>
    </RepresentationFailures>
  </Detail>
</Fault>

Wann ein Fehler aufgetreten ist, der client nur zurück, "Die request-Nachricht enthält Fehler, die verhindern, dass die Verarbeitung der Anfrage.", Ich würde gerne die "AttributeRepresentationFailure" - Knoten und Kind-Knoten, bevor Sie wieder das werfen der exception im client.

Ich verstehe es so ist, dass ich brauche, um zu definieren, eine Fehlerklasse, die enthält alle details werden deseralized, so dass der Aufruf zu "CreateFault" zurückgeben kann . Ich habe gelesen, durch http://msdn.microsoft.com/en-us/library/ms733841.aspx aber ich verstehe einfach nicht genau, wie die Klasse definiert wird, so dass der client weiß, welche Art von Fehler wird geworfen.

UPDATE

In der client-side handle-Fehler-Methode, die ich Hinzugefügt

 try
        {
            throw faultexcept;
        }
        catch (System.ServiceModel.FaultException<InvalidRepresentation> invalidRepresentationFault)
        {
            throw invalidRepresentationFault;
        }
        catch (System.ServiceModel.FaultException otherFault)
        {
            throw otherFault;
        }
        catch (Exception ex)
        {
            throw ex;
        }

Der Fehler ist immer gefangen unter den base-Fehler-Klasse "otherFault".
Meine InvalidRepresentation Klasse ist wie folgt definiert

 [DataContract(Namespace = Constants.Rm.Namespace)]
public class InvalidRepresentation 
{
    private string _attributeType;
    private string _attributeValue;
    private string _attributeFailureCode;
    private string _additionalTextDetails;

    [DataMember]
    public string AttributeType
    {
        get { return _attributeType; }
        set { _attributeType = value; }
    }

    [DataMember]
    public string AttributeValue
    {
        get { return _attributeValue; }
        set { _attributeValue = value; }
    }

    [DataMember]
    public string AttributeFailureCode
    {
        get { return _attributeFailureCode; }
        set { _attributeFailureCode = value; }
    }

    [DataMember]
    public string AdditionalTextDetails
    {
        get { return _additionalTextDetails; }
        set { _additionalTextDetails = value; }
    }


    public InvalidRepresentation() {

    }
}

InformationsquelleAutor The Unique Paul Smith | 2013-06-13

Schreibe einen Kommentar