2013-07-02 41 views
2

使用ServiceRunner,异常处理,与EndConfig.ReturnsInnerException = TRUE,ServiceStack Config.ReturnsInnerException

我预计该服务将返回到客户端的内部异常(原创除外),

代替WebServiceException(仅包含errorCode字符串中的内部异常的名称)。

在调试过程中,在被覆盖的HandleException,

我能看到EndConfig.ReturnsInnerException是真的。

但客户端没有得到内部异常。我如何解决这个问题?

重要的是,客户端要获得内部异常。

UPDATE 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; 
      } 
     }  

回答

2

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

我试图返回一个内部异常,我将不得不使用错误列表来包含细节,就像你一样。

+0

感谢您的回答,这是一个老问题,我找到了错误列表的解决方案。请看我的更新。 – stefan2410