我想抛出许多类型的错误:validationFault,businessFault,internallServerErrorFault。什么是最佳实践分离许多不同的错误
validationFault - 验证输入数据到方法后的错误 businessFault - 任何商业/域名例外 - 没有许可,登录名不是免费的等。 internallSerrverError - 任何未处理的例外
每个故障都将设置为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 - 将包含消息属性
客户将分别抓住这个错误。 Fault异常中的任何错误都将是内部服务器错误
try
{
}
catch (FaultException<ValidationFoult> ex)
{
}
catch (FaultException<BusinessFault> ex)
{
}
catch (FaultException ex)
{
// internal server error
}
这个问题的另一个解决方案是什么?任何sugestions?
答案 0 :(得分:0)
而不是单独的Fault实体,只需创建一个公共实体(可能称为“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;
}
}