1

在 WCF 上摸不着头脑......我有 XML 消息,其中的孩子<DataFields>可以是任何东西,例如......

<Test1Root> 
  <CaseNo></CaseNo>
  <Activity></Activity>
  <DataFields>
     <AccountRef></AccountRef>
     <PropRef></PropRef>
     <User></User>
  </DataFields>
</Test1Root>

我已经在 BizTalk 中使用<xs:any>for the <DataFields>...

<xs:element name="DataFields">
  <xs:complexType>
    <xs:sequence>
      <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

但我很难看到如何在 WCF 中处理这个问题[DataContract]......

我尝试同时使用svcutil.exexsd.exe来创建类,它们都提供了主要元素(CaseNo、Activity 等),但似乎都没有处理 xs:any of DataFields ...

  • svcutil 将 DataFields 作为 XmlElement
  • xsd 将其作为一个类,但具有 XmlElement [] 类型的 Any 属性

是否有可能更好地处理子元素?

4

3 回答 3

2

好吧,xs:any可以是任何东西,所以 .NET 工具能做的最好的事情就是给你一个对象数组......

既然它可以是任何东西,你真的无能为力,对吧?它可以是任何东西......所以你需要使用可以是任何东西的类型。

如果您真的需要xs:any在您的 XML 模式中使用它,并且不能用例如一组更具体的xs:element(可能从彼此继承)来替换,我不知道如何获得更好的支持......

于 2010-07-05T05:49:03.487 回答
0

你可以这样做。我在服务中做过很多次。我没有做太多 WCF 服务,但我相信它们的工作方式相同。架构中的<xs:any>被转换为代码中的 XmlElement。在您的情况下,一个 XmlElement 数组。

于 2011-06-08T15:24:34.590 回答
0

我在使用“任何”元素定义响应属性的 WSDL 的旧 Web 服务时遇到了一些问题。

使用自定义消息格式化程序解决了问题。写了一篇关于它的帖子,更详细地描述了解决方案http://devdump.wordpress.com/2012/10/26/working-with-legacy-web-services-and-wcf/,希望它可以节省其他人的时间我能找到的关于这个主题的唯一讨论。

于 2012-10-25T22:18:13.143 回答