1

我想抛出多种错误异常:validationFault、businessFault、internallServerErrorFault。什么是分离许多不同故障的最佳实践

validationFault - 验证输入数据到方法后的错误 businessFault - 任何业务/域异常 - 没有权限,登录名不是免费等 internallServerError - 任何未处理的异常

每个故障都会设置errorCode

场景 1 一种类型的 FaultException。在 BaseException 中是带有validationException 列表的属性,Message 的属性。客户端捕获此 FaultException 然后解析 errorCode 并从正确的属性中提供数据

try
{
}
catch (FaultException<BaseException> ex)
{
 // in this place will be all fault exception type. From error code client must have   
 // dedicated kind of fault - validation, business exception. BaseException will 
 // be has properly set data for validation or business logic exception.
}
catch (FaultException ex)
{
// internal server error
}

场景 2 单独的故障:ValidationFoult、BusinnesFault、internalServerFault 到不同的故障 FaultException FaultException

ValidationFault - 将包含验证错误的数据 - 带有键的字典 - 属性名称,值 - 此属性的错误 BusinessFault - 将包含消息属性

客户端将单独捕获此故障。故障异常中的任何故障都将是内部服务器错误

try
{
}
catch (FaultException<ValidationFoult> ex)
{
}
catch (FaultException<BusinessFault> ex)
{
}
catch (FaultException ex)
{
// internal server error
}

这个问题的另一种解决方案是什么?有什么建议吗?

4

1 回答 1

0

无需单独的故障实体,只需创建一个通用实体(可能称为“CommonFault”)并通过 ErrorCode、ErrorMessage、StackTrace(如果服务是内部服务)等属性共享错误详细信息。像下面这样的东西。

[DataContractAttribute]
public class CommonFault
{
    private string errorcode;
    private string errormessage;
    private string stackTrace;

    [DataMemberAttribute]
    public string ErrorCode
    {
        get { return this.code; }
        set { this.code = value; }
    }

    [DataMemberAttribute]
    public string Message
    {
        get { return this.message; }
        set { this.message = value; }
    }

    [DataMemberAttribute]
    public string StackTrace
    {
        get { return this.stackTrace; }
        set { this.stackTrace = value; }
    }

    public CommonFault()
    {
    }
    public CommonFault(string code, string message, string stackTrace)
    {
        this.Code = code;
        this.Message = message;
        this.StackTrace = stackTrace;
    }
}
于 2013-09-19T19:38:29.913 回答