【问题标题】:What is the correct encoding of a Boolean value in a SOAP message?SOAP 消息中布尔值的正确编码是什么?
【发布时间】:2010-11-01 14:09:26
【问题描述】:

我们已经在 VB.NET 中针对客户提供给我们的 WSDL 文件生成了一个 Web 服务。

在测试中,我们的客户提出了一个问题,抱怨我们的 Web 服务生成的 XML 使用“true”和“false”作为布尔值,而不是“1”和“0”。此外,他们建议我们的实现因此而“中断”。

我的印象是,在这种情况下,“真/假”和“1/0”是可以互换的?

无论哪种方式,所有 XML 序列化都由 .NET 框架处理,而不是我们的代码 - 所以我想我无论如何都没有机会改变它?!

谁能给我指出一些支持我的故事或证明我错了的文档?如果我错了,有谁知道我可以如何改变这种行为?

提前谢谢...

【问题讨论】:

    标签: .net soap


    【解决方案1】:

    来自SOAP spec:'布尔词汇形式“1”和“true”是可以互换的。'

    真的没什么好说的了。

    【讨论】:

      【解决方案2】:

      不是与 WSDL 相关,而是与 XML 相关:客户曾经声称他们无法读取我们的 XML 文件,并坚持要我们根据标准生成 XML 文件。不幸的是,他们的标准与官方标准不同。例如,他们无法解析 cmets,遇到了 XML 标头问题,并且他们希望 XML 在每个元素之后都能很好地缩进并带有换行符。为什么?因为他们编写了自己的 XML 解析器,所以无法遵循真正的标准。
      由于我们的软件也被其他客户使用,我们首先想给他们发送“手指”,然后让他们安静地消失。但是一位营销人员找到了一个更好的解决方案,我们的一位开发人员被派往该客户,就正确使用 XML 提供更多建议。我们教育了客户,他们突然意识到他们不必编写自己的解析器。我们帮助他们改进了自己的代码库,并让他们非常高兴,因为我们通过教育他们解决了问题。而这一切只需支付少量额外费用,因此营销人员也很高兴。 :-)

      不过,还有一个选择!用您自己的枚举替换布尔值。例如是/否或类似的东西。优点是您可以使用附加值(例如 yes/no/maybe 甚至 yes/no/filenotfound... /false 因为当你使用 1/0 时人们往往会犯错误。为什么?很简单,1是真的吗?还是假的?在某些编程语言中,-1 表示真。在旧语言中,1 表示错误。 (因为在那些语言中,布尔值是一种错误位,如果 set- 等于 1,则表示错误。)
      因此,可读性应该意味着您应该更喜欢使用 true/false,否则最终会讨论为什么 1 表示真...

      【讨论】:

      • 感谢您的回复。通常我会完全支持你的营销人员的方法,但在这种情况下,我担心我在食物链的下游太远了,无法听到!
      • 至于更改为枚举 - 这是个好主意,但我必须遵守已发布的 WSDL。我会在政治路线上奋斗,看看我能走到哪里! :o)
      【解决方案3】:

      您的选择是:

      1. 告诉客户你是对的(你是正确的)并且truefalse 在SOAP 中是完全有效的布尔值。然后处理愤怒的客户。

      2. 将布尔属性更改为整数。

      我自己会选择#2,只是为了和谐。

      【讨论】:

      • 我会选择选项 1,否则其他客户可能会抱怨期望 true/false 并收到 0/1。更糟糕的是,不用抬头:1 是真还是假? :-)
      • 嗯,1 表示正确,但在 VB.Net 中我认为 -1 是正确的,所以你的观点很好。
      • 感谢您的回复。不幸的是,我必须遵守已发布的 WSDL,所以 #2 已经过时了。看起来越来越像#1是我要走的路!
      猜你喜欢
      • 2011-01-29
      • 1970-01-01
      • 2021-03-22
      • 2011-03-17
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      相关资源
      最近更新 更多