Ich verwende C#, um eine Dienstoperation zu erstellen. Wenn etwas schief geht, möchte ich eine Ausnahme werfen, die Client-Seite sein könnte.Ausführliche Ausnahme mit Dienstoperation
Wenn jedoch eine Ausnahme ausgelöst wird, kann der Client nur einen generischen Fehler wie "400: bad request" erhalten und auf die Ausnahmebedingungsnachricht kann nicht zugegriffen werden.
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
and
config.useVerboseErrors = true;
ich das TargetInvocationException auch auspacken und stattdessen zurückgeben DataServiceException mit dieser Funktion:
protected override void HandleException(HandleExceptionArgs args)
{
// Handle exceptions raised in service operations.
if (args.Exception.GetType() == typeof(TargetInvocationException)
&& args.Exception.InnerException != null)
{
if (args.Exception.InnerException.GetType() == typeof(DataServiceException))
{
// Unpack the DataServiceException.
args.UseVerboseErrors = true;
args.Exception = args.Exception.InnerException as DataServiceException;
}
else
{
// Return a new DataServiceException as "400: bad request."
args.UseVerboseErrors = true;
args.Exception = new DataServiceException(400, args.Exception.InnerException.Message);
}
}
}
Wenn ich den Browser verwenden
In meinem Service-Betrieb habe ich die ausführliche Fehler mit diesem aktiviert Ich kann die ausführliche Ausnahmebedingungsnachricht sehen, aber wenn ich programmgesteuert versuche, ist die innere Ausnahme null und ich sehe nur die generische Fehlermeldung "400: schlechte Anfrage".
Seltsamerweise, wenn ich einen Code 200 statt 400 zurückgeben, kann ich die Ausnahmebedingungsnachricht im Antworttext sehen. Aber offensichtlich möchte ich das nicht tun.
Gibt es also eine Möglichkeit, die Ausnahmebedingungs-Clientseite zu erhalten, wenn Sie eine Ausnahme von einer Dienstoperation auslösen?