SOAP标头中元素顺序的重要性

时间:2012-03-22 13:28:50

标签: visual-studio-2010 soap wsdl

我在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>

0 个答案:

没有答案