我试图在 WCF 客户端上捕获给定的FaultException。我基本上需要从故障类中提取内部描述,以便我可以将其打包到另一个异常中,以便上层执行任何操作。
我已经成功完成了多次,这次的不同之处在于,错误被声明为数组,正如您可以从抛出异常的方法顶部声明的服务引用属性中看到的那样:
[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 响应中看到数据(描述字段等),也可以在代码中执行此操作。
所以我需要的东西肯定会回来,但由于某种原因,它要么没有被反序列化,要么我无法从代码中获取它。
任何帮助表示赞赏!
UPDATE:
尝试使用 @Darin 建议但没有运气,我从 XmlReader 中提取的字符串是“/r/n”:
var sb = new StringBuilder();
using (XmlReader reader = fault.GetReaderAtDetailContents())
{
while (reader.Read())
sb.AppendLine(reader.ReadOuterXml());
}
var detail = sb.ToString();
看起来细节部分根本没有出现!
我在 UPS 论坛上找到了解决方案:
https://developerkitcommunity.ups.com/index.php/Special:AWCforum/st/id371
“问题是 Visual Studio 没有完全正确地映射出 ErrorDetail 对象。ErrorDetail 节点称为“ErrorDetail”,但为其生成的类型是“ErrorDetailType”。我编辑了为每个服务生成的 reference.cs 类。正在使用并添加了一个 TypeName:”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)