【问题标题】:In a client-server relationship, should the server always rethrow the exception to the client?在客户端-服务器关系中,服务器是否应该总是向客户端重新抛出异常?
【发布时间】:2010-06-01 22:01:37
【问题描述】:

我有一组 Web 服务(服务器)和一个使用它的应用程序(客户端)。在这种关系中,服务器是否应该总是抛出异常(即在 throw 块中,重新抛出捕获的异常),而客户端捕获这个。服务器可以处理的异常,它将处理而不是重新抛出,但其他所有内容都将被抛出到调用层以进行进一步的操作(消费应用程序可以引发一个消息框或其他)。

这是可以处理的异常的一个很好的例子吗:由于目录需要特殊权限,因此无法写入文件,因此如果引发异常,则将文件写入不需要管理员权限的地方。

谢谢

【问题讨论】:

    标签: exception exception-handling


    【解决方案1】:

    有不止一种类型的错误。

    • 对于客户可以更正并重试的错误,请向他们提供有关更正内容的说明。
    • 对于重试不会产生任何影响的其他错误(例如未经授权的操作),请让用户知道他们无法执行该操作的原因,以及他们是否可以采取任何措施来改变问题。
    • 正如您所建议的,如果客户端发出更新记录的请求,并且服务器上发生了客户端无法控制的情况,但服务器可以恢复,则不要通知客户端。如果您需要知道,请让服务器通知您。
    • 如果服务器发生错误,但服务器无法恢复,您肯定需要将故障通知客户端并通知您,或者稍后重试。同样,系统应该会通知您。

    【讨论】:

      【解决方案2】:

      该特定错误听起来像是服务器上的配置问题,因此客户端没有任何操作手段,不应向客户端提供该信息。

      我通常将此类错误包含在一般错误消息下(“系统错误,请联系您的系统管理员”)并将错误记录在服务器上(以供以后检查)。

      【讨论】:

      • 如果客户端提供路径作为参数,则客户端确实具有操作方式。否则,我完全同意。最好的选择是写到最可靠的地方(隔离存储?),所以我猜你很准确。
      • 同意客户端提供路径的情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2014-04-11
      • 2015-06-23
      相关资源
      最近更新 更多