正如问题所述,我正在竭尽全力寻找从一个WCF调用返回多个FaultException的最佳方法:
该方案如下:
客户A呼叫客户B
ClientB对ServerC进行了许多调用,其中一些调用可能返回FaultExceptions
我想将所有FaultExceptions返回给ClientA,但是我还没有遇到任何好的方法。
我尝试使用XmlSerializer,DataContractSerializer和NetDataContractSerializer对FaultException和MessageFault对象进行序列化和反序列化均无济于事。
我真正关心的唯一元素是“原因”,“代码”和“细节”。我的最后一招是手动编写代码以序列化“原因”和“代码”,但是我希望避免这种情况。
我还有其他方法可以做到吗?
编辑:从我得到的答复来看,我认为我的问题不是很清楚
在伪代码中,我尝试执行以下操作:
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
}
您必须按自己的方式处理。
为了有一个一致的例外
如果要报告有关根本原因的信息,则必须使用
InnerException
类的FaultException
属性,但是不能保存InnerExceptions数组。如果是这种情况,则您确实要收集多个异常并想报告所有异常
那么您可以创建一个自定义的FaultException类,该类继承自前者,并具有属性
Exception[] InnerExceptions
。但是,再次,我真的不相信您有这种“多个例外”。也许您的意思是嵌套异常,这些异常可以由InnerException常规属性正确处理。
如果您可以向我们展示一些伪代码,将会有所帮助。
关于c# - 从一个WCF调用返回多个FaultException的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4798311/