我想在WCF或ASMX中实现的dotNET SOAP Web服务中表示多态数据,以便模式正确反映我的意图。
特别是我对表达结构化数据(如JSON)所需的闭合多态(AKA sum类型AKA标记的union AKA代数数据类型...)感兴趣。
这是一个多次以不同形式提出的问题。然而,答案经常声称即使在原则上也不可能在消息传递协议中表示多态性。 e.g。
WCF MessageContract Inheritance
当然,允许开放多态,即允许X
为任何实现接口I
的类型,会引发非平凡的设计问题。但是,闭合多态(X
可以是任何类型T1
,T2
,T3
)设计协议并不困难,实际上http://www.w3.org/2001/XMLSchema有substitutionGroup
完成这项工作。参见:
Defining recursive algebraic data types in XML XSD
我到目前为止所阅读的所有内容都表明,WCF和ASMX都无法使用substitutionGroup
或任何其他正确表达多态的方法生成模式。相反,我只是在数据契约的KnownTypes
属性中列出具体类型,并希望最好。
如果这真的是我们能做到的最好的事情,这似乎无法表达一个非常基本的界面概念,我相信微软的好人有一个非常好的借口。如果有人能够了解原因,我将不胜感激。