我使用C#构建服务操作。当出现问题时,我想抛出一个可以捕获客户端的异常。
然而,当抛出异常时,客户端只能得到类似" 400的通用错误:错误请求"并且无法访问异常消息。
在我的服务操作中,我用这个启用了详细错误:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
and
config.useVerboseErrors = true;
我还解压了TargetInvocationException,而是使用这个函数返回一个DataServiceException:
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);
}
}
}
当我使用浏览器时,我可以看到详细的异常消息,但是当我以编程方式尝试时,内部异常为空,我只看到通用错误消息" 400:错误请求"。
奇怪的是,如果我返回代码200而不是400,我可以在答案体中看到异常消息。但显然我不想这样做。
那么,当您从服务操作中抛出异常时,有没有办法获取异常消息客户端?
答案 0 :(得分:0)
你看过end to end tracing了吗?此外,this MSDN页面并不像它看起来那样令人生畏,我认为“当发生异常时提供附加信息”部分对您有用。读一个可爱的。