我一直在 WCF 中弄脏我的手。现在我想到的一个问题是关于 WCF 中的故障合同。
我想知道我们为什么需要它。考虑一个我添加 2 个数字的示例应用程序。
所以在响应中我喜欢 2 个字段
结果 - 成功/错误
错误 - 错误详细信息(代码 + 文本)
现在,如果我的 WCF 服务有任何异常,我可以在 catch 块中捕获它并将值分配给 Response 对象
结果 - 成功/错误
错误 - 错误详细信息(代码 + 文本)
那么故障合约在哪里出现呢?
我一直在 WCF 中弄脏我的手。现在我想到的一个问题是关于 WCF 中的故障合同。
我想知道我们为什么需要它。考虑一个我添加 2 个数字的示例应用程序。
所以在响应中我喜欢 2 个字段
结果 - 成功/错误
错误 - 错误详细信息(代码 + 文本)
现在,如果我的 WCF 服务有任何异常,我可以在 catch 块中捕获它并将值分配给 Response 对象
结果 - 成功/错误
错误 - 错误详细信息(代码 + 文本)
那么故障合约在哪里出现呢?
您在示例中所做的是通过“返回代码”向调用者指示发生了错误。故障契约代表了一种不同的方法:异常。
异常被认为比返回码更好的原因有很多。例如阅读以下内容:您更喜欢哪个以及为什么更喜欢异常代码或返回代码?. 这就是为什么 WCF 的架构师选择提供故障契约机制,而不是通过返回码实现相同的功能。
在您的情况下,故障合同方法将要求您不应该返回响应对象。您应该简单地返回一个 int。如果发生任何阻止您返回 int 的异常情况,您的代码将抛出一个强类型的错误,向调用者指示出了什么问题以及如何克服它。
这是一个老问题,但我仍然希望为未来的读者发布一些答案。
找到这个网站http://www.c-sharpcorner.com/UploadFile/aravindbenator/wcf-exception-handling-best-ways/。
作者说,如果我们不使用Fault Contract,响应数据(从服务到客户端)会包含一些敏感数据。
如果我们没有Fault Contract,在WCF app.config 或web.config 中,我们仍然想要Fault Exceptions 或Web Fault Exceptions,我们将设置为:
<serviceDebug includeExceptionDetailInFaults="true" />
,但是,如果我们设置<serviceDebug includeExceptionDetailInFaults="false" />
了,我们必须在服务操作之上有Fault Contract。