使用 ServiceRunner,进行异常处理,EndConfig.ReturnsInnerException=true,
我预计服务会返回给客户端内部异常(原始异常),
而不是 WebServiceException (在 errorCode 字符串中只有内部异常的名称)。
在调试期间,在覆盖的 HandleException 中,
我可以看到 EndConfig.ReturnsInnerException 实际上是真的。
但客户端没有得到内部异常。我该如何解决这个问题?
重要的是,客户端获取内部异常。
更新 2
我通过以下方式发送内部异常的信息。
(我希望 WebServiceException 的内部异常能够引用我的异常。)
class MyServiceRunner<T> : ServiceRunner<T>
{
public override object HandleException(IRequestContext requestContext, T request,
Exception ex)
{
myException myex=ex as myException;
if (myex != null)
{
ResponseStatus rs = new ResponseStatus("APIException", myex.message);
rs.Errors = new List<ResponseError>();
rs.Errors.Add(new ResponseError());
rs.Errors[0].ErrorCode = myex.errorCode;
rs.Errors[0].FieldName = requestContext.PathInfo;
var errorResponse = DtoUtils.CreateErrorResponse(request, ex, rs);
// log the error if I want .... Log.Error("your_message", ex);
// as I don't call the base.HandleException, which log the errors.
return errorResponse;
}
else
return base.HandleException(request, requestDto, ex);
}
}
在客户端
catch (WebServiceException err)
{
if (err.ErrorCode == "APIException" && err.ResponseStatus.Errors != null )
{
string detailerror =err.ResponseStatus.Errors[0].ErrorCode;
string module = err.ResponseStatus.Errors[0].FieldName;
}
}