为什么不同的SOAP客户端会说不同的XML方言?

时间:2013-01-31 08:34:38

标签: xml soap

使用.Net Soap客户端和我的WSF / PHP客户端调用相同的SOAP服务,我可以看到发送的XML之间的差异。

这是我的:

<soapenv:Envelope>
    <soapenv:Header>
        <soapenv:Action>http://www.aaa.fr/SendMessage</soapenv:Action>
        <wsse:Security soapenv:mustUnderstand="1">
            <xenc:EncryptedKey Id="EncKeyID-xxxxxxxxx-xxxx-xxxx-xxxx">

这是.Net XML:

<s:Envelope>
    <s:Header>
        <a:Action s:mustUnderstand="1" u:Id="_3">http://www.aaa.fr/SendMessage</a:Action>
        <o:Security s:mustUnderstand="1">
            <e:EncryptedKey Id="EncKeyID-xxxxxxxxx-xxxx-xxxx-xxxx">

我不是XML和SOAP的专家,但这是一个大问题吗?

1 个答案:

答案 0 :(得分:1)

区别在于命名空间前缀的定义。只要名称空间前缀“s”指向与“soapenv”相同的名称空间,并且“o”指向与“wsse”相同的名称空间,并且“e”指向与“xenc”等相同的名称空间。应该没有问题,XML实际上是一样的。

示例:

<a:NodeA xmlns:a="http://www.a.com">
    <b:NodeB xmlns:b="http://www.b.com">
        <c:NodeC xmlns:c="http://www.c.com">My Data!</c:NodeC>
    </b:NodeB>
</a:NodeA>

相同
<anamespace:NodeA xmlns:anamespace="http://www.a.com">
    <bns:NodeB xmlns:bns="http://www.b.com">
        <c:NodeC xmlns:c="http://www.c.com">My Data!</c:NodeC>
    </bns:NodeB>
</anamespace:NodeA>

因为即使前缀不同,它们也指向两个示例中的相同名称空间(分别为http://www.a.comhttp://www.b.comhttp://www.c.com)。