我试图在 WCF 客户端上捕获给定的 FaultException。我基本上需要从故障类中提取一个内部描述,以便我可以将它打包到另一个异常中,以便上层执行任何操作。
我已经成功完成了很多次,这次的不同之处在于,fault 被声明为一个数组,正如您从在引发异常的方法之上声明的服务引用属性中看到的那样:
[System.ServiceModel.FaultContractAttribute(typeof(FaultClass[]), Action = "http://whatever/", Name = "whateverBusinessFault")]
这是我的代码:
try
{
// call service here
}
catch (FaultException<FaultClass[]> ex)
{
if (ex.Detail != null && ex.Detail.Length > 0)
{
throw new CustomException(ex.Detail[0].description);
}
else
{
throw;
}
}
问题是细节(它是一个数组)总是在代码中返回空,即使我可以在 WCF 跟踪的 SOAP 响应中看到数据(描述字段等)。
所以我需要的东西肯定会回来,但由于某种原因,它要么没有被反序列化,要么我无法从代码中得到它。
任何帮助表示赞赏!
更新:
尝试@Darin 建议但没有运气,我从 XmlReader 中提取的字符串是“/r/n”:
var sb = new StringBuilder();
using (XmlReader reader = fault.GetReaderAtDetailContents())
{
while (reader.Read())
sb.AppendLine(reader.ReadOuterXml());
}
var detail = sb.ToString();
看起来细节部分根本没有出现!