Ich habe einen WCF 4 Rest-Dienst, der von einem Java-Client und auch einem c# mvc3-Client konsumiert werden soll. Der Inhalt der Antwort muss als json zurückgegeben werden.
Ich möchte in der Lage sein, alle Ausnahmen/Fehler auf konsistente Art und Weise an die Kunden zurückzugeben. Ich habe gelesen, dass WebFaultException verwendet werden sollte und in der Tat funktioniert es gut.
Allerdings möchte ich nicht meine Anwendungslogik Projekt mit WebFaultExceptions zu verschmutzen, wie es von einem nicht-Web-Projekt verwendet werden kann.
Ich habe daher die Implementierung von IErrorHandler im WCF-Rest-Dienst in Betracht gezogen, um JEDE Ausnahme abzufangen und dann für bestimmte Ausnahmen, z. B. ValidationException, die Ausnahme als Fehler in einer WebFaultException verpackt zurückzugeben. Dies scheint jedoch nicht zu funktionieren, und ich erhalte die folgende Http 504-Antwort, wenn das Formular fiddler aufgerufen wird
[Fiddler] ReadResponse() ist fehlgeschlagen: Der Server hat keine Antwort für diese Anfrage zurückgegeben.
Ich habe den Code auf das Nötigste reduziert, um zu zeigen, was ich im Wesentlichen tue.
public void ProvideFault(Exception error,
MessageVersion version,
ref Message fault)
{
var ex = new WebFaultException<Exception>(
new Exception("you can't do that"),
HttpStatusCode.Unauthorized);
var xmf = ex.CreateMessageFault();
fault = Message.CreateMessage(version,
null,
xmf,
new DataContractJsonSerializer(xmf.GetType()));
}
Was mache ich falsch?