2

使用 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;
            }
        }     
4

1 回答 1

2

查看源代码,ServiceRunner.HandleException 调用 DtoUtils.HandleException。该方法是唯一使用 ReturnsInnerException 设置的方法。它使用 ReturnsInnerException 来决定是将给定异常用于 ResponseStatus 对象,还是使用异常的内部异常。ServiceStack 中没有我能找到返回内部异常的机制。它只返回 ResponseStatus 对象。

我也在尝试返回一个内部异常,并且我将不得不像您一样使用错误列表来包含详细信息。

于 2014-02-13T14:29:04.073 回答