SOAP消息中布尔值的正确编码是什么?

时间:2010-11-01 14:09:27

标签: .net soap

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

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

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

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

有人能指出一些文件,要么支持我的故事,要么证明我错了?如果我错了,有谁知道我怎么能改变这种行为?

提前致谢...

3 个答案:

答案 0 :(得分:13)

SOAP spec:'布尔词法形式“1”和“真”是可以互换的。'

真的不多说。

答案 1 :(得分:3)

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

但是还有另一种选择!用您自己的枚举替换布尔值。例如是/否或类似的东西。优点是,您可以使用其他值(例如是/否/可能甚至yes/no/filenotfound来扩展这些枚举...
仍然,首选布尔值并保持SOAP消息的人类可读性,更好地使用真/假,因为当你使用1/0时,人们往往会犯错误。为什么?简单,1是真的吗?还是错?在某些编程语言中,-1表示真。在较旧的语言中,1表示错误。 (因为在这些语言中,布尔值是一种错误位,如果设置 - 等于1则表示错误。)
因此,可读性意味着您应该更喜欢使用true / false或者最终讨论为什么1意味着真实...

答案 2 :(得分:2)

您的选择是:

  1. 告诉客户端你是对的(你是),truefalse是SOAP中完全有效的布尔值。然后与愤怒的客户打交道。

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

  3. 我自己和#2一起去,只是为了和谐这一切。