Ich möchte alle WebServiceException
verarbeiten, die von meinem Dienstclient ausgelöst werden. Gibt es einen guten Weg, dies jetzt zu tun?
Zum Beispiel übergebe ich eine einzelne ServiceClientBase um eine Windows Forms App. Ich gebe einen API-Schlüssel an den Server in einem HTTP-Header. Für jede Anfrage, dass der API-Schlüssel nicht gültig ist, möchte ich ein Meldungsfeld anzeigen, das dem Benutzer mitteilt, dass die Anfrage nicht autorisiert war und sie den API-Schlüssel setzen sollten. Aber ich will diesen Code nicht überall:
%Vor%So etwas wäre nett:
%Vor%Ich weiß, dass es den lokalen Antwortfilter gibt, in den ich mich einklinken kann, aber ich brauche die materialisierte WebServiceException.
Ich sehe ServiceClientBase.cs, um zu sehen, was ich tun kann, aber ich würde jede Hilfe schätzen. Danke.
Wenn ich dies eher als Designfrage als als API-Frage anspreche, besteht die Antwort darin, Ihren Serviceclient zu umbrechen. Persönlich habe ich etwas ähnliches getan, damit ich Service-Ausnahmen auf dem Client protokollieren kann.
Dies könnte ein Ausgangspunkt sein:
%Vor%Mit der Zeit können Sie weitere Vorteile für diese zusätzliche Ebene der Indirektion finden, z. B. das Hinzufügen von lokalem Caching, das Protokollieren aller Anfragen & amp; Antworten [auf eine Debug-Konsole]. Und sobald es in Ihrem gesamten Client-Code verwendet wird, ist es ziemlich billig zu warten.
Was die API betrifft, ich glaube nicht, dass sie das bietet, was Sie wollen. Persönlich war ich damit zufrieden (vor allem, da die IReturn<T>
-Schnittstelle hilft, Funktionen wie die von Ihnen gewünschte zu konsolidieren). Aber wenn du nicht damit zufrieden bist, dann bist du nur eine Pull-Anfrage entfernt von einem Dialog mit Demis , um es zu verbessern. (- =
Das ist ein bisschen zu spät zum Spiel, aber ich stieß auf das Gleiche und fing an, in die Quelle zu graben. Es gibt tatsächlich eine einfache Lösung dafür, überschreiben Sie die HandleResponseException
-Methode in welchem ServiceClient Sie auch verwenden. Direkt von den Kommentaren:
Ich persönlich mache so etwas wie das Folgende auf meinem Override von JsonServiceClient
Tags und Links servicestack