Я импортировал 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>