Проблема с генерацией DataContracts из xsd с помощью svcutil - PullRequest
1 голос
/ 08 июня 2019

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

В cmd.exe я попытался выполнить команду:

svcutil / dconly loginSoap.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>

1 Ответ

0 голосов
/ 08 июня 2019

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

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

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

...