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