在WCF上摸不着头......我收到了<DataFields>
的孩子可以是任何东西的XML消息,例如...
<Test1Root>
<CaseNo></CaseNo>
<Activity></Activity>
<DataFields>
<AccountRef></AccountRef>
<PropRef></PropRef>
<User></User>
</DataFields>
</Test1Root>
我使用<xs:any>
的{{1}}在BizTalk中处理了这个...
<DataFields>
但我很难看到如何在WCF <xs:element name="DataFields">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
</xs:sequence>
</xs:complexType>
</xs:element>
...
我尝试使用 svcutil.exe 和 xsd.exe 来创建类,它们都提供了主要元素(CaseNo,Activity等),但都没有似乎处理xs:任何DataFields ......
是否可以更好地处理子元素?
答案 0 :(得分:2)
嗯,xs:any
可以是任何东西,所以.NET工具可以做的最好的就是给你一个对象数组....
因为它可以是任何东西,你真的没什么可做的,对吧?它可以是任何东西......所以你需要使用一种可能是任何东西的类型。
如果您确实需要XML架构中的xs:any
,并且无法替换为例如一组更具体的xs:element
(可能是彼此继承),我不知道你怎么能得到更好的支持......
答案 1 :(得分:0)
你可以这样做。我在服务中做了很多次。我没有多做WCF服务,但我相信它们的工作方式相同。模式中的<xs:any>
将转换为代码中的XmlElement。在你的情况下是一个XmlElement数组。
答案 2 :(得分:0)
我在旧的Web服务中遇到了一些问题,WSDL使用“any”元素定义了响应属性。
使用自定义消息格式化程序解决了问题。写了一篇关于它的帖子,更详细地描述了解决方案http://devdump.wordpress.com/2012/10/26/working-with-legacy-web-services-and-wcf/,希望它能节省其他时间,因为这是我能找到的关于这个主题的唯一讨论。