2013-07-02 84 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