gpt4 book ai didi

WCF - 故障/异常与消息

转载 作者:行者123 更新时间:2023-12-03 07:41:23 30 4
gpt4 key购买 nike

我们目前正在争论通过 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com