首页 > 解决方案 > Svcutil 未生成所有类

问题描述

我想调用一个我想为其生成代理类的外部 SOAP 服务。.wsdl 不会在线公开,而是与一组 .xsd 文件一起提供。然后我使用 svcutil(也尝试使用 dotnet-svcutil 1.0.4)来生成类。考虑以下 XML:

<xs:complexType name = "ValidationReply" abstract="false">
  <xs:complexContent>
    <xs:extension base="common:Reply">
      <xs:sequence>
        <xs:element name="data" type="ns:ValidationReplyData" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>
<xs:complexType name="ValidationReplyData" abstract="false">
  <xs:sequence>
    <xs:element name="errors" type="ns:Error" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

生成以下代码:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("dotnet-svcutil", "1.0.4")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="Namespace")]
public partial class ValidationReply: Reply
{

    private Error[] dataField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
    [System.Xml.Serialization.XmlArrayItemAttribute("errors", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
    public Error[] data
    {
        get
        {
            return this.dataField;
        }
        set
        {
            this.dataField = value;
        }
    }
}

问题在于 XML 定义了一个包含错误列表的内部类型,其中 Svcutil 将错误列表直接作为数据字段,而不是使数据字段的类型为 ValidationReplyData。ValidationReplyData 根本不会生成。

代码编译没有任何问题,我可以毫无错误地调用外部服务。然而,数据字段始终为空,因为响应格式为:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <fl:ValidationReply xmlns:fw="Namespace" >
      <data>
        <errors>
          <code>236</code>
        </errors>
        <errors>
          <code>237</code>
        </errors>
      </data>
    </fl:ValidationReply>
  </S:Body>
</S:Envelope>

哪个没有正确反序列化到生成的类。

简而言之,有谁知道如何强制 Svcutil 生成所有类?冗余与否。

我已经简化了 xml 片段,因此示例中可能存在一些不一致之处,但问题的摘要是缺少 ValidationReplyData 类-

标签: c#.netxmlwcfsvcutil.exe

解决方案


推荐阅读