我一直在WCF中弄脏手。现在,我想到的一个问题是关于WCF中的故障合同。
我想知道为什么我们需要它。考虑一个示例应用程序,我在其中添加2个数字。
所以在响应中我有2个字段
结果 - 成功/错误
错误 - 错误详细信息(代码+文本)
现在,如果我的WCF服务有任何异常,我可以在catch块中捕获它并为Response对象分配值
结果 - 成功/错误
错误 - 错误详细信息(代码+文本)
故障合同在哪里出现?
答案 0 :(得分:3)
您在示例中所做的是通过"返回代码"向呼叫者表明发生了错误。故障合同代表了一种不同的方法:例外。
为什么异常被认为优于返回代码有很多原因。请阅读此内容,例如:Which, and why, do you prefer Exceptions or Return codes?。这就是为什么WCF的架构师选择提供故障契约机制,而不是通过返回码实现相同的功能。
在您的情况下,故障合同方法将强制您不应该返回响应对象。你应该简单地返回一个int。如果发生任何异常事件阻止你返回int,你的代码会抛出一个强类型的错误,指示调用者出了什么问题以及如何克服它。
答案 1 :(得分:0)
这是一个老问题,但我仍希望为将来的读者发布一些答案。
找到此网站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" />
,我们必须在服务操作之上设置故障合同。