的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
它不是正面或負面的東西,但只是工作的工具。