【问题标题】:Error handling using Soap Headers使用 Soap 标头处理错误
【发布时间】:2010-09-19 13:28:48
【问题描述】:

我们正在开发一项新的网络服务,并正在研究在肥皂响应中返回错误的“最佳做法”。

我们正在考虑创建一个错误响应对象,每个响应都将包含一个属性。然而,这似乎有点重,想知道是否可以使用 SOAP 标头来携带这些信息?您通常如何使用 SOAP 处理自定义错误?

【问题讨论】:

    标签: c# .net web-services soap error-handling


    【解决方案1】:

    Soap 已经使用自定义标头来获取错误信息,您只需在服务器端抛出异常,并在客户端以SoapException 的形式引发异常。

    如果您想更好地控制异常消息/信息,可以在服务器端抛出 SoapExceptions。

    编辑: 有关请求的额外信息,可以使用自定义的 soap 标头。这是一个example article on CodeProject,它使用自定义soap标头进行身份验证,但自定义soap标头可用于其他目的,例如发送不一定是错误条件的额外信息(可以是业务逻辑信息)

    【讨论】:

    • 抱歉,我不确定我的问题是否清楚,我正在考虑在响应中传达业务规则错误。如果可以避免,抛出异常不是坏习惯吗?
    • 您还可以将自定义soap标头添加到响应或请求中以获取更多信息以及请求msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    SOAPFault 用于保存错误和状态信息,服务器在 HTTP 标头中返回 500 以将其声明为错误。

    参见 W3.org 的规范

    http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383507

    只要您为第三方清楚地记录它,您就可以通过将其放置在肥皂标题中甚至在返回结果的元素中来设计自己的信息令牌。但是,这不是引发错误的标准方法。

    【讨论】:

    • 这看起来像是我们所追求的。你会推荐这个而不是响应中返回的自定义错误对象吗?
    • 如果您通过说明可以在soap header 中找到额外信息之类的内容来清楚地记录它,那么客户标头解决方案似乎对您很有效。我做过类似的事情。
    【解决方案3】:

    我过去曾将类似的技术用于复杂的操作。尤其是当您需要(多个?)错误描述以及错误代码时。

    【讨论】:

      【解决方案4】:

      Soap 标头用于带外信息,不应用于错误消息。此外,soap 标头不应在soap 响应中使用,因为:

      • 如果 mustUnderstand 缺失或为 0,客户端可以放心地忽略它们。
      • 如果 mustUnderstand 为 1,则客户端无法发出不理解的信号(因为它是响应)。

      是的,我知道一些 WS-* 标准在响应中描述了 soap 标头...

      所以,

      对严重到没有响应对象的错误使用肥皂故障。 将状态标记添加到警告和信息消息的响应中。

      【讨论】:

      • 我不是 SOAP Web 服务方面的专家,但您所描述的方式听起来是解决业务应用程序错误的更好解决方案,而不是将错误放入 SOAP 错误标头中。我很难想象错误 XML 会是什么样子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多