C# Can';t获取友好的自定义错误以在WCF中反馈给客户端

C# Can';t获取友好的自定义错误以在WCF中反馈给客户端,c#,wcf,C#,Wcf,我抛出了一个新的FaultException(“错误”)返回给我的客户,并显示文本“error” 现在我更进一步,我想使用FaultContract来正确地执行它 因此,我用[DataContract]属性创建了一个名为ServiceFault的函数,它只是有一个字符串ErrorMessage属性 我的代码是: ServiceFault ServiceFault=新的ServiceFault(“断开”) 抛出新的FaultException(serviceFault) 我制作了一个控制台应用程序

我抛出了一个新的
FaultException(“错误”)返回给我的客户,并显示文本“error”

现在我更进一步,我想使用
FaultContract
来正确地执行它

因此,我用
[DataContract]
属性创建了一个名为ServiceFault的函数,它只是有一个
字符串ErrorMessage
属性

我的代码是:

ServiceFault ServiceFault=新的ServiceFault(“断开”)

抛出新的FaultException(serviceFault)

我制作了一个控制台应用程序来测试它,并使用try-catch捕获故障异常,但我只得到:

未能调用该服务。可能原因:服务处于脱机状态 或无法接近;客户端配置与配置不匹配 代理现有代理无效。有关详细信息,请参阅堆栈跟踪 更多细节。您可以尝试通过启动一个新的代理进行恢复,恢复 默认配置,或刷新服务

我想它应该说发生了错误异常,但它没有,我只是明白了

我会错过一些明显的东西吗?也许是一个配置选项?我使用以下示例实现了它:

我应该补充一点,我已经将
[FaultContract(typeof(ServiceFault))]
放在ServiceContract上

还要注意的是:如果我只是抛出一个常规的FaultException,那么客户端将正确处理它


当我抛出一个自定义错误异常时,客户端更新服务/检索MEX数据需要很长时间,这是可疑的,即使我连续更新两次。

我已经解决了这个问题,我留下这个问题来阻止其他人有同样的头痛

这是由ServiceFault(我的自定义故障类)未正确序列化引起的

原始类有两个属性,一个
string
和一个
int
,由getter和private setter定义

其中的某些部分让它非常混乱,因此我将它们设置为简单字段,并重建/更新服务引用。它立刻就成功了


因此,请小心您的DataContracts,以确保它们可以正确序列化。

您的客户是否有新服务契约的副本?是的,每次下载完整元数据(理论上)时,我都会更新服务引用,包括所有DataContracts和servicecontracts。如果我使用对象浏览器在客户机上浏览服务,我可以看到我的ServiceFault classI,我想可能是私有setter完成的。为了序列化和反序列化类,所有属性都必须是公共的set和get。