Web服务是否应该抛出异常或结果对象

Rya*_*son 12 soap web-services exception-handling asmx

我不确定在Web服务中抛出异常是一个好主意我感到非常高兴.如果不是堆栈跟踪,我也不会介意.这不是我不想要的.

我已经围绕几个实现进行了研究,似乎对此没有达成共识.例如,CampaignMonitor会返回Result对象,而其他人则不会.

在架构上,我不确定返回一个返回对象是否有意义,当然异常是一个例外,但我对Return对象的喜欢之处在于它对于最终用户来说是一个更优雅的解决方案.

有没有人有更好的解决方案?

编辑

顺便说一下,我正在使用ASMX Web服务,其中打开CustomErrors不是一个选项.

Mal*_*don 8

不要让你在网络服务中的事实混淆了这个问题.这只是一个实现细节.

使用您的正常异常处理策略.最佳实践说不要在低级别代码中捕获异常 - 除非您可以在那里解决该异常并继续正常进行.应该将异常提升到表示层,以便可以通知用户错误.

因此,应用于Web服务 - 通常抛出异常(导致SoapFault).这允许调用客户端代码使用它的内置异常处理标准来处理它.


Joh*_*ers 6

您在谈论什么堆栈跟踪?你试过这个吗?

在ASMX和WCF服务中,未捕获的异常将转换为SOAP错误.在这两种情况下,它们都可以配置为不包含任何堆栈跟踪.实际上,这是WCF中的默认值.

因此,返回这样的错误的正确方法是通过错误.产生错误的一种方法是抛出而不处理异常.

  • 阅读SOAP故障.这是将任意详细信息返回给客户端的标准方法.在ASMX Web服务中,您必须在SoapException实例的Detail属性中"手动"返回它们,但如果您必须继续使用ASMX,这是正确的方法.当然更好的方法是使用WCF.此外,不要将其视为通知用户异常.例外是一个实现细节.你告诉他们有关错误的信息. (2认同)