我在VS2010中为我的项目(c#中的客户端Web服务)导入了一个WSDL(文件)。
正确生成了类。我可以捕获(使用Fiddler应用程序)发送的SOAP消息。 但实际上服务器正在等待Soap头中的特定订单,回复是400 HTTP错误:由于语法格式错误,服务器无法理解该请求
发送消息:
<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”,然后在“安全”之后:
<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应用程序发送,服务器的回复是OK。
我尝试在WSDL文件中反转soap header元素,然后再次生成类,它更改了类但是仍然首先使用“Security”元素发送消息。
从服务器Web服务的角度来看,必须按特定顺序包含元素吗? 为什么我无法更改客户端发送的元素的顺序? (甚至我改变了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>