gpt4 book ai didi

c# - 从一个 WCF 调用返回多个 FaultExceptions 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 20:10:40 24 4
gpt4 key购买 nike

正如问题所说,我正在思考从一个 WCF 调用返回多个 FaultExceptions 的最佳方法:

场景如下:
ClientA 调用ClientB
ClientB 多次调用 ServerC,其中一些可能会返回 FaultExceptions

我想将所有 FaultExceptions 返回给 ClientA,但我还没有找到任何好的方法。

我已尝试使用 XmlSerializer、DataContractSerializer 和 NetDataContractSerializer 对 FaultExceptions 和 MessageFault 对象进行序列化和反序列化,但均无济于事。

我真正关心的唯一元素是原因、代码和细节。我最后的办法是手动编写代码来序列化 Reason 和 Code,但我希望避免这种情况。

还有其他方法可以解决这个我所缺少的问题吗?

编辑:从我得到的回复来看,我认为我的问题不是很清楚

在伪代码中,我正在尝试执行以下操作:

class ClientA()
{
Main()
{
ClientB.OperateOnManyValues(array[] values)
}
}

ClientB()
{
OperateOnManyValues(array[] values)
{
foreach(Val val in values)
{
try
{
ServerC.OperateOnOneValue(val)
}
catch(FaultException ex)
{
errorList.Add(ex)
}
}
return errorList
}
}

编辑 2:

首先,我要感谢大家尝试回答这个问题。我觉得有些答案是针对不同问题的答案。
一位发帖者建议我一收到错误就抛出异常。不幸的是,现在这就是系统的工作方式。操作的每个值都完全独立于其他值,并且不受其他值的成功或错误的影响。我不希望一个错误影响其他值的处理。
另一位发帖者建议返回某种数据结构,其中包含所有故障的所有 FaultException 数据。这就是我想做的,但问题是返回 FaultExceptions 列表会引发序列化错误。有什么方法可以序列化 FaultException 以便我可以从 WCF 调用返回列表中的多个?

最佳答案

嗯...我不完全理解场景的第二部分。如果你的客户 B 表现如下

ServerC.A();
[...]
ServerC.B();
[...]
ServerC.C();

while(condition)
ServerC.Call();

然后 第一个 异常会自动重新抛给客户端 B,并且可能会重新抛给 A,因此您无需处理多个异常。

但是,如果 ClientB 从不同的线程调用 ServerC 的多个方法,那么您可能会遇到类似的情况。尽管如此,如果 ClientB 像这样从 ServerC 调用服务

try
{
ServerC.A();
} catch(Exception ex)
{
//store exception for A
}
[...]
try{
ServerC.B();
} catch(Exception ex)
{
//store exception for B
}
[...]
try
{
ServerC.C();
} catch(Exception ex)
{
//store exception for C
}

你必须以自己的方式处理它。

为了有一致的异常

报告有关根本原因的信息,您必须使用 FaultException 类的 InnerException 属性,但您不能保存 InnerExceptions 数组。

如果您确实收集了多个异常并希望全部报告

然后您可以创建一个自定义 FaultException 类,继承自前者,具有属性 Exception[] InnerExceptions

但是,我真的不相信你有这种“多重异常(exception)”。也许您的意思是嵌套异常,它们由 InnerException 常规属性正确处理。

如果您能向我们展示一些伪代码,那将会有所帮助。

关于c# - 从一个 WCF 调用返回多个 FaultExceptions 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798311/

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