Ошибка wsdl.exe "Атрибут элемента недопустим в зашифрованных частях сообщения." - PullRequest
0 голосов
/ 21 марта 2019

У меня есть сервис SOAP, с которым я хотел бы интегрироваться, я хочу генерировать классы CSharp соответственно, но и wsdl.exe, и svcutil.exe выдают ошибки. Так как сервис мыла принадлежит третьей стороне, которой пользуются многие другие клиенты, я не могу его изменить.

Я вижу ошибку с wsdl.exe:

Error: The element attribute is not allowed on encoded message parts. The erroneous part is named 'return' in message 'UserLogin0Response'.

Я также получаю кучу или предупреждения:

Warning: This web reference does not conform to WS-I Basic Profile v1.1.
R2706: A wsdl:binding in a DESCRIPTION MUST use the value of "literal" for the use attribute in all soapbind:body, soapbind:fault, soapbind:header and soapbind:headerfault elements.
  -  Input element soapbind:body of operation 'UserLogin' on portType 'IWsAPIUserbinding' from namespace 'http://tempuri.org'.
  -  Output element soapbind:body of operation 'UserLogin' on portType 'IWsAPIUserbinding' from namespace 'http://tempuri.org'.
  -  Input element soapbind:body of operation 'UserLogout' on portType 'IWsAPIUserbinding' from namespace 'http://tempuri.org'.
  -  Output element soapbind:body of operation 'UserLogout' on portType 'IWsAPIUserbinding' from namespace 'http://tempuri.org'.

For more details on the WS-I Basic Profile v1.1, see the specification
at http://www.ws-i.org/Profiles/BasicProfile-1.1.html.

Я думал, что SOAP - это стандарт, поэтому я удивлен, что существует два противоречивых мнения о том, как должен выглядеть SOAP.

Итак, вопрос: Как я могу сгенерировать свои классы csharp из этого WSDL?

Это WSDL:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IWsAPIUserservice" targetNamespace="http://tempuri.org" xmlns:tns="http://tempuri.org" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
    <types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://tempuri.org">
            <xs:include schemaLocation="xsd/UserOperation.xsd"/>
        </xs:schema>
    </types>
    <message name="UserLogin0Request">
        <part name="UserName" type="xs:string"/>
        <part name="Password" type="xs:string"/>
    </message>
    <message name="UserLogin0Response">
        <part name="return" element="tns:USERLOGINRESP"/>
    </message>
    <message name="UserLogout1Request"/>
    <message name="UserLogout1Response">
        <part name="return" element="tns:USERLOGOUTRESP"/>
    </message>
    <portType name="IWsAPIUser">
        <operation name="UserLogin">
            <input message="tns:UserLogin0Request"/>
            <output message="tns:UserLogin0Response"/>
        </operation>
        <operation name="UserLogout">
            <input message="tns:UserLogout1Request"/>
            <output message="tns:UserLogout1Response"/>
        </operation>
    </portType>
    <binding name="IWsAPIUserbinding" type="tns:IWsAPIUser">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="UserLogin">
            <soap:operation soapAction="urn:WsAPIUserIntf-IWsAPIUser#UserLogin" style="rpc"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:WsAPIUserIntf-IWsAPIUser"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:WsAPIUserIntf-IWsAPIUser"/>
            </output>
        </operation>
        <operation name="UserLogout">
            <soap:operation soapAction="urn:WsAPIUserIntf-IWsAPIUser#UserLogout" style="rpc"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:WsAPIUserIntf-IWsAPIUser"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:WsAPIUserIntf-IWsAPIUser"/>
            </output>
        </operation>
    </binding>
    <service name="IWsAPIUserservice">
        <port name="IWsAPIUserPort" binding="tns:IWsAPIUserbinding">
            <soap:address location="https://xxxxx.xxx/IWsAPIUser"/>
        </port>
    </service>
</definitions>
...