我们正在构建一个网络服务(肥皂,.NET),该服务将与(主要是)本地客户端(Windows,C ++)交谈,我们想知道什么是与客户传达错误的最佳方法(例如,像登录服务一样,BaDhapped的东西,或未找到的用户),并且在向客户端抛出异常或使用某种错误代码模型进行上述方面无法做出决定。

您希望在客户端的处理上使用什么:接收错误代码或处理ServerFault异常,其中包含错误的原因?
1)我们为什么考虑例外:因为它会使服务器端代码更加均匀
2)我们为什么要考虑错误代码:因为我们 思考 从客户端角度来看,这更有意义。

如果2)真的是正确的,我们可能想选择错误代码,而不是异常?是这里的情况吗?

另外,如果我们与托管客户而不是本地客户交谈,答案会改变吗?

有帮助吗?

解决方案

肥皂有一个概念 故障, ,您可以将异常转换为服务器端的故障,并且在客户端代理上可以再次将故障转换回异常。这在WCF和Java Metro Stack中非常出色,无法对本机C ++客户端发表评论。

关于SOA的最佳实践,只有当客户需要不同的方式处理某种类型的错误时,才定义一个通用故障,几乎没有特定的故障。切勿在生产部署中向客户端发送异常堆栈跟踪。这是因为从理论上讲,服务器跟踪对客户端没有意义,也出于安全原因。记录服务器上的完整错误和堆栈TACKTRACE,并向故障中的日志发送唯一的引用。在WCF中,我使用企业库中的Microsoft异常处理块来生成GUID,并将异常转换为SOAP故障。

检查指导 微软模式和实践.

其他提示

我最近使用Java 6库进行了Web服务,可以向呼叫者报告一个例外(我没有研究它是如何自动完成的)。

使客户端在错误报告中向开发人员提供堆栈跟踪的能力非常有用(反对获得近似时间戳,然后如果您碰巧记录了它,则必须在日志中查找它)。

因此,从开发人员的角度看,使用异常。

如果是Web服务,则不能准确地导致服务器投掷客户端将捕获的异常。在接口上,您的服务器基本上必须返回某种错误代码,即使这是一个字符串 An exception occurred. Type %s, message %s, stack trace %s.

至于客户端,您可以让响应读数代码检查响应,以查看它是否包含错误并在客户端提出异常。这是一个很好的方法,它至少可以很好地处理。但是,C ++没有很好的例外交接,并且最好远离C ++例外。如果您不能使用更好的语言,那么只需坚持错误代码即可。

许可以下: CC-BY-SA归因
scroll top