1

对 DataContractSerializer 彻底失望,我尝试使用 IXmlSerializable 类型和 XmlSerializer 在 WCF 中启动和运行。

我已经在我的类中实现了 IXmlSerializableXmlSchemaProvider 以进行序列化并为我的 OperationContract 声明 [XmlSerializerFormat]。

使用复杂模式时,我在尝试查看 WSDL 时收到以下错误:

"Schema type information provided by IXmlSerializable is invalid: 
Reference to undeclared attribute group 'anAttributeGroupInMySchema'"

该模式具有各种包含(此属性在其中一个中声明)。我什至在代码 ( schema.Includes) 中添加了包含的模式,但无济于事。

即使在最简单的示例项目中(具有 1 个元素和 2 个属性的简单模式,简单的对应类,你可以命名它)我终于克服了这个错误,但碰到了:

"WCF_IXmlSerializable.TestClass.TestSchemaProvider() must return a valid type 
name. Type 'TEST' cannot be found in the targetNamespace='www.test.com'."

可悲的是,我不知道什么有效的类型名称。这当然不是我的 XSD AFAICS 中的元素名称。

有任何想法吗?

编辑:

示例源代码可以在这里在线查看。

4

1 回答 1

1

我看到两个问题:您的测试架构没有定义名为 的类型TEST_CLASS,它定义了一个具有该名称的元素。XSD 应该是这样的:

<xs:schema xmlns="www.test.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="www.test.com">
  <xs:complexType name="TEST_CLASS">
    <xs:sequence>
      <xs:element name="TEST">
        <xs:complexType>
          <xs:attribute name="TYPE"/>
          <xs:attribute name="DURATION"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

第二个问题是XmlSchema应该使用以下XmlSchema.Read()方法加载对象:

using (XmlReader reader = XmlReader.Create(xsdDir + xsdFile)) {
  XmlSchema schema = XmlSchema.Read(reader, null); 
  . . . 
}
于 2013-02-21T15:51:41.773 回答