没有名称空间前缀的SOAP 1.1信封是否有效?
我在.Net开发了ASMX Web服务。呼叫我并以如下格式发送消息的出站客户端:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://myCustomNamespace.com/">
<soapenv:Header/>
<soapenv:Body>
<web:Test/>
</soapenv:Body>
</soapenv:Envelope>
处理得当。当在IBM的Cast Iron下运行的客户端以下列格式发送信封时,问题就出现了:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<Test xmlns="http://myCustomNamespace.com/" />
</Body>
</Envelope>
与段落 3中的http://www.w3.org/TR/2000/NOTE-SOAP-20000508/相关。与XML的关系:
SOAP应用程序应该在SOAP生成的消息中为SOAP定义的所有元素和属性包含正确的SOAP命名空间。 SOAP应用程序必须能够在它接收的消息中处理SOAP名称空间。它必须丢弃具有不正确名称空间的消息(参见第4.4节),并且它可以处理没有SOAP名称空间的SOAP消息,就好像它们具有正确的SOAP名称空间一样。
与我相关的是我希望处理这两个请求吗?
答案 0 :(得分:1)
示例消息完全是名称空间限定的 - 它只是使用空前缀(标准中名称错误的名称空间&#39;)。
通过将XML读入DOMDocument并查看节点的.nameSpace
属性,您可以轻松验证每个节点都是命名空间限定的事实。
如果相应的WSDL指定元素表单是“不合格的”,那么事情变得棘手的是正文条目的子节点。或者,如果标准编码规则适用(&#34;名称在其包含类型中是本地的访问者具有不合格的元素名称;所有其他名称都具有限定名称。&#34;)。
在这种情况下,使用空前缀(&#39;默认名称空间&#39;)要求将body entry children显式限定为没有名称空间:
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<foo xmlns="some-URI">
<result xmlns="">meow</result>
</foo>
</Body>
</Envelope>
否则它们将继承最近的封闭默认命名空间的命名空间,从而无法验证。
不符合名称空间限制的SOAP信封是一个不同的鱼。 SOAP 1.1说:
SOAP应用程序应该在SOAP生成的消息中为SOAP定义的所有元素和属性包含正确的SOAP命名空间。 SOAP应用程序必须能够在它接收的消息中处理SOAP名称空间。它必须丢弃具有不正确名称空间的消息(参见第4.4节)和它可以处理没有SOAP名称空间的SOAP消息,就好像它们具有正确的SOAP名称空间一样。
换句话说:你必须处理
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<foo xmlns="some-URI"/>
</Body>
</Envelope>
你可以处理
<Envelope>
<Body>
<foo xmlns="some-URI"/>
</Body>
</Envelope>