我正在编写某种 WCF 服务。大多数异常都在 BL 实现中捕获并在那里处理。我的 API 的每个返回类型都是一个包含错误代码、错误消息和成功 bool 值的类(名为“结果”)。
当异常被处理时,这个类会相应地更新并最终发送回客户端。 一些异常是偏离路线的,未处理的。目前,我用通用的 try-catch 包装来自服务层的每个 BL 调用,这样我就可以捕获每个未处理的异常并创建一个带有通用失败消息、错误代码和 success=false 的通用“结果”类。
这是处理异常的好方法还是我应该让服务向客户端抛出未处理的异常? 您可以假设客户端无法使用异常中的数据,因此它不会从异常中包含的额外信息中获益。
最佳答案
检查异常屏蔽。
这是一个根据您在配置文件中指定的规则将服务引发的异常映射到故障契约的过程。这节省了大量使用 try/catch block 的笨拙工作。
这是一个 post帮助你:
但一般来说 - 故障将分为 3 类:
1) 客户端错误——客户端试图做一些不允许的事情,所以它需要知道这件事。例如。无法设置必填字段。 - 返回解释错误的特定消息。
2) 不影响客户端的业务错误。被认为是正常操作的错误,例如付款授权检查失败。完全对客户端隐藏,或者返回一些消息:“执行请求时出错:请稍后再试...”
3) 系统错误 - 意外 - 不正常操作:替换为通用消息:“系统错误:调用支持”
但在所有情况下,关键是删除堆栈跟踪,尤其是当它是面向公众的服务时。
有了屏蔽,您将拥有 3 个涵盖上述场景的故障合约,并在屏蔽配置中适本地设置文本。
请注意,您通常希望在开发过程中关闭屏蔽,因为它会使调试系统变得非常痛苦!
关于c# - 处理 WCF 服务错误的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6607959/