的xsi:type
属性通常不是必要的,因为包含在WSDL的types
部XSD模式是足够的信息用于客户机/服务器找出所有元素的类型。
但考虑到有时需要将字段或元素作为任何类型(xsd:anyType
),以便您可以使用多态(如您自己提到的那样)。
例如,您可能有一个Web服务,该服务在标记为xsd:anyType
的XML字段内运行发送给它的一些命令。这样的服务在设计时没有指定数据类型,所以类型信息必须在运行时提供。
当然,这样的服务并不接受绝对的任何类型,而是使用一组预定义的类型(即,不要只发送任何垃圾;只是来自一组命令类型的有效命令)。
但XML部分只是通信。您最终必须在客户端/服务器代码中使用该类型的程序。这意味着将xsd:anyType
转换为编程语言中的对象。
WSDL-To-Code工具通常会将xsd:anyType
映射到顶级Object
类,坦率地说它并不实用。因此,xsd:anyType
总是与xsi:type
一起序列化,它指定实际类型,以便您的代码知道其中的内容。
至于如何以doc/literal格式发送xsi:type
我的答案是:我认为它是有效的。 WSDL和SOAP规范没有提及与此相关的具体内容(如禁止它),而WS-Interoperability规范允许它。
所以我认为xsi:type
它不是正面或负面的东西,但只是工作的工具。