Важность порядка элементов в заголовке SOAP - PullRequest
1 голос
/ 22 марта 2012

Я импортировал WSDL (файл) в VS2010 для своего проекта (клиентская веб-служба на c #).

Класс сгенерирован правильно.Я могу поймать (с помощью приложения Fiddler) SOAP сообщение отправлено.Но на самом деле сервер ожидает определенного порядка в заголовке Soap, ответ - 400 HTTP error: запрос не может быть понят сервером из-за неправильного синтаксиса

Сообщение отправлено:

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <s:Header>
                <h:Security xmlns:h="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                    <UsernameToken>
                        <Username>umwsuser</Username>
                        <Password>test</Password>
                    </UsernameToken>
                </h:Security>
                <h:AdditionalInfo xmlns:h="http://myserver/ws/common" xmlns="http://myserver/ws/common">
                    <ClientName>ISClient</ClientName>
                </h:AdditionalInfo>
        </s:Header>
        .....
    </s:Envelope>

Сервер сначала ожидает «AdditionalInfo» и «Security» после:

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <s:Header>
                <h:AdditionalInfo xmlns:h="http://myserver/ws/common" xmlns="http://myserver/ws/common">
                    <ClientName>ISClient</ClientName>
                </h:AdditionalInfo>
                <h:Security xmlns:h="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                    <UsernameToken>
                        <Username>umwsuser</Username>
                        <Password>test</Password>
                    </UsernameToken>
                </h:Security>
        </s:Header>
        .....
    </s:Envelope>

Я получил сообщение, которое я отправил на сервер, инвертированный элемент Security и элемент AdditionalInfo, а затем отправил с приложением SOAPUI, ответ отс сервером все в порядке.

Я попытался инвертировать элемент заголовка мыла в файле WSDL, а затем снова сгенерировал класс, он изменил класс, но сообщение по-прежнему отправляется с элементом «Безопасность» первым.С точки зрения веб-службы сервера, обязательно ли иметь элемент в определенном порядке?Почему я не могу изменить порядок элемента, отправленного Клиентом?(даже я изменил порядок элемента в файле WSDL)

Часть содержимого WSDL:

    <operation name="Getdata">
        <soap:operation soapAction="urn:Getdata"/>
        <input>
            <soap:header message="tns:AdditionalInfo" part="AdditionalInfo" use="literal"/>
            <soap:header message="tns:SecurityHeader" part="Security" use="literal"/>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
            <soap:header message="tns:IDResponse" part="IDResponse" use="literal"/>
        </output>
    </operation>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...