2

EndConfig.ReturnsInnerException=true で、例外処理のために ServiceRunner を使用し、

サービスがクライアントに内部例外 (元の例外) を返すことを期待していましたが、

WebServiceException の代わりに (errorCode 文字列内の内部例外の名前のみ)。

デバッグ中、オーバーライドされた HandleException で、

EndConfig.ReturnsInnerException が実際に true であることがわかりました。

ただし、クライアントは内部例外を取得しません。どうすればこの問題を解決できますか?

クライアントが内部例外を取得することが重要です。

更新 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 に答える