我们目前正在争论是否最好通过 WCF 通道抛出错误,而不是传递指示状态的消息或来自服务的响应。
错误来自 WCF 的内置支持,您可以在其中使用内置的错误处理程序并做出相应的反应。然而,这会带来开销,因为在 .NET 中引发异常可能会非常昂贵。
消息可以包含必要的信息来确定您的服务调用发生了什么,而无需引发异常的开销。然而,它确实需要几行重复的代码来分析消息并确定其内容之后的操作。
我们尝试创建一个可以在我们的服务中使用的通用消息对象,这就是我们想出的:
public class ReturnItemDTO<T>
{
[DataMember]
public bool Success { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
[DataMember]
public T Item { get; set; }
}
如果我的所有服务调用都返回此项目,我可以持续检查“成功”属性以确定一切是否顺利。然后,如果需要,我会在指示出现问题的事件中收到错误消息字符串,以及包含 Dto 的通用项目。
异常信息必须记录到中央日志服务,而不是从服务传回。
想法?评论?想法?建议?
进一步澄清我的问题
我遇到的错误合同问题是传达业务规则。
例如,如果有人登录,并且他们的帐户被锁定,我该如何沟通?他们的登录显然失败了,但由于“帐户锁定”的原因而失败。
我也是:
A) 使用布尔值,在消息帐户被锁定的情况下抛出错误
B)返回带有相关信息的AuthenticatedDTO