2 Stimmen

Ausnahmen in Webdiensten

Meine Gruppe entwickelt eine dienstbasierte (.NET WCF) Anwendung und wir versuchen zu entscheiden, wie wir Ausnahmen in unseren internen Diensten behandeln sollen. Sollen wir Ausnahmen auslösen? Ausnahmen serialisiert als XML zurückgeben? Einfach einen Fehlercode zurückgeben?

Denken Sie daran, dass der Benutzer diese Ausnahmen nie sehen wird, sondern nur für andere Teile der Anwendung.

3voto

FlySwat Punkte 165766

WCF verwendet SoapFaults als nativer Weg, um Ausnahmen entweder vom Dienst zum Client oder vom Client zum Dienst zu übermitteln.

Sie können einen benutzerdefinierten SOAP-Fehler mit der Methode FaultContract Attribut in Ihrer Vertragsschnittstelle:

Zum Beispiel:

[ServiceContract(Namespace="foobar")]
interface IContract
{
    [OperationContract]
    [FaultContract(typeof(CustomFault))]
    void DoSomething();
}

[DataContract(Namespace="Foobar")]
class CustomFault
{
    [DataMember]
    public string error;

    public CustomFault(string err)
    {
        error = err;
    }
}

class myService : IContract
{
    public void DoSomething()
    {
        throw new FaultException<CustomFault>( new CustomFault("Custom Exception!"));
    }
}

2voto

hova Punkte 2731

Warum also nicht einfach die standardmäßigen SOAPExceptions auslösen? Das Problem mit Fehlercodes und serialisiertem XML ist, dass beide zusätzliche Logik erfordern, um zu erkennen, dass tatsächlich ein Fehler aufgetreten ist. Ein solcher Ansatz ist nur sinnvoll, wenn Sie eine spezielle Protokollierung oder Logik haben, die auf der anderen Seite des Webdienstes ablaufen muss. Ein solches Beispiel wäre die Rückgabe einer Markierung, die besagt, dass es in Ordnung ist, fortzufahren", mit einem Fehlerausnahmebericht.

Unabhängig davon, wie Sie es werfen, wird es die Arbeit nicht einfacher machen, da die aufrufende Seite immer noch erkennen muss, dass es eine Ausnahme gab und damit umgehen muss.

1voto

Phil Bennett Punkte 4733

Ich bin ein bisschen verwirrt, ich bin nicht leichtfertig - Sie sagen, Sie wollen Ausnahmen als XML serialisiert auf der einen Seite zurückgeben und dass der Benutzer nie die Ausnahmen auf der anderen Seite sehen. Wer wird diese Ausnahmen zu sehen bekommen?

Normalerweise würde ich empfehlen, WCF-Fehlerverträge zu verwenden.

0voto

brien Punkte 4241

Phil, verschiedene Teile der Anwendung rufen sich gegenseitig über WCF auf. Mit "Ausnahmen als XML serialisiert zurückgeben" meinte ich, dass der Rückgabewert der Funktion ein Ausnahmeobjekt sein würde. Ein Erfolg würde durch null angezeigt werden.

Ich glaube nicht, dass das die richtige Option ist.

WCF-Fehlerverträge klingen gut, aber ich weiß nichts über sie. Überprüfen Sie Google gerade jetzt.

0voto

wojo Punkte 9981

Ich würde es vermeiden, Ausnahmen direkt an den Kunden zurückzuschicken, es sei denn, Sie sind damit einverstanden, dass so viele Details zurückgeschickt werden.

Ich würde empfehlen, WCF-Fehler zu verwenden, um Ihre Fehlermeldung und Ihren Code zu übermitteln (etwas, das verwendet werden kann, um eine Entscheidung über den Empfänger zu treffen, um erneut zu versuchen, Fehler aus usw.), je nachdem, ob es der Sender oder der Empfänger ist, der Fehler macht.

Dies kann mit FaultCode.CreateReceiverFaultCode und FaultCode.CreateSenderFaultCode geschehen.

Ich bin in den Prozess der durch diese gerade jetzt, aber lief in einen bösen Haken scheint es in der WCF-Fehler generiert SOAP 1.1 Antwort. Wenn Sie interessiert sind, können Sie meine Frage über es hier überprüfen:

.NET WCF-Fehler erzeugen falsche SOAP 1.1-Faultcode-Werte

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X