使用svcutil

时间:2019-06-08 18:41:37

标签: c# soap xsd datacontract svcutil.exe

我正在尝试根据我的xsd文件生成带数据合同注释的类。然后,这些类应用作我的Soap Web服务的交换数据类型。

在cmd.exe中,我尝试运行命令:

  

svcutil / dconly loginSoap.xsd / language:C#

但是失败,并显示以下错误:

  

错误:无法导入名称空间“ http://www.megatravel.xyz/XMLSchema/XMLSchemaSoap/Login”中的“ loginRequest”。根粒子必须是序列。要么更改架构,以便这些类型可以映射到数据协定类型,要么使用ImportXmlType或使用其他序列化器。

     

如果使用/ dataContractOnly选项导入数据合同类型并收到此错误消息,请考虑改用xsd.exe。在服务合同上应用XmlSerializerFormatAttribute属性后,可以在Windows Communication Foundation中使用xsd.exe生成的类型。或者,考虑使用/ importXmlTypes选项将这些类型导入为XML类型,以与服务合同上的DataContractFormatAttribute属性一起使用。

我的xsd文件是:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.megatravel.xyz/XMLSchema/XMLSchemaSoap/Login"
           targetNamespace="http://www.megatravel.xyz/XMLSchema/XMLSchemaSoap/Login"
           elementFormDefault="qualified">
    <xs:element name="loginRequest">
        <xs:complexType>
            <xs:all>
                <xs:element name="username" type="xs:string"/>
                <xs:element name="password" type="xs:string"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
    <xs:element name="loginResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="message" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:0)

错误将您指向正确的方向。

只需将<xs:all>替换为<xs:sequence>

或将XSD.exe与/classes

一起使用