Проблема с созданием DataContracts из xsd с помощью svcutil

Я пытаюсь создать аннотированные классы DataContract на основе моих файлов xsd. Затем эти классы следует использовать в качестве типов данных обмена для моих веб-служб Soap.

В cmd.exe пробовал запустить команду:

svcutil/dconlyloginSoap.xsd/язык: C#

Но он терпит неудачу со следующей ошибкой:

Ошибка: введите «loginRequest» в пространстве имен «http://www.megatravel.xyz/XMLSchema/XMLSchemaSoap/Login» не может быть импортирован. Корневая частица должна быть последовательностью. Либо измените схему, чтобы типы могли сопоставляться с типами контрактов данных, либо используйте ImportXmlType, либо используйте другой сериализатор.

Если вы используете параметр /dataContractOnly для импорта типов контрактов данных и получаете это сообщение об ошибке, рассмотрите возможность использования xsd.exe. Типы, сгенерированные xsd.exe, можно использовать в Windows Communication Foundation после применения атрибута XmlSerializerFormatAttribute к контракту службы. В качестве альтернативы рассмотрите возможность использования параметра /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>

person milorad    schedule 08.06.2019    source источник


Ответы (1)


Ошибка указывает вам правильное направление.

Просто замените <xs:all> на <xs:sequence>

или используйте XSD.exe с /classes

person Henk Holterman    schedule 08.06.2019