WCF - 故障/异常与消息

标签 wcf exception

我们目前正在争论通过 WCF channel 抛出错误与传递指示状态或服务响应的消息是否更好。

故障带有 WCF 的内置支持,您可以使用内置的错误处理程序并做出相应的 react 。然而,这会带来开销,因为在 .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) 使用 bool 值,抛出错误并锁定消息帐户

B) 返回 AuthenticatedDTO 以及相关信息

最佳答案

This however carries overhead as throwing exceptions in .NET can be quite costly.

您将对象序列化和反序列化为 XML,并通过慢速网络发送它们。相比之下,引发异常的开销可以忽略不计。

我通常坚持抛出异常,因为它们清楚地传达了出现问题的信息,并且所有网络服务工具包都有一个很好的方法来处理它们。

在您的示例中,我将抛出 UnauthorizedAccessException 并显示消息“帐户已锁定”。

说明:默认情况下,.NET wcf 服务将异常转换为FaultContracts,但您可以更改此行为。 MSDN:Specifying and Handling Faults in Contracts and Services

关于WCF - 故障/异常与消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/81306/

相关文章:

c# - WCF Web 服务方法建议

java - java中方法声明的异常

.net - SqlDataReader 抛出 NullReferenceException!什么可能导致此问题以及如何调试?

c# - 如何在没有 HTTP 容器的情况下调用 WCF 操作?

c# - WCF 重试代理

c# - WCF - WCF 客户端调用 WCF 服务时出现 'The service certificate is not provided for target' 错误

jquery - 对 WCF Restful 服务的 Json 调用 (jquery) 始终运行错误函数

hibernate - 通过单列而不是复合主键连接

c# - 不一致 "Cross-thread operation not valid"异常

java - 从二维数组抛出异常后继续