这是我的.net代码生成的xml片段,发送到第三方soap服务端点。
<?xml version="1.0" encoding="utf-16"?>
<ProgramInterface
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<vnsState_request xmlns="http://www.statewide.Request.com">
.....
....
...
这通过代码工作,但当我把我从SoapUI中的调试断点中提取的完全相同的请求发送到同一服务时,它返回XML格式错误,如下所示
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Malformed SOAP message</faultstring>
当我为同一操作生成样本请求时,我在生成的请求XML中看到了这种差异
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vns="http://www.statewide.Request.com">
<soapenv:Header/>
<soapenv:Body>
<vns:VNSSTATEOperation>
<vns:vnsState_request>
为什么SoapUI需要这些额外的标签,为什么它不能使用我的.Net代码生成的请求?为什么它需要vns:
预先设置每个元素以及这些新元素?
<soapenv:Envelope >
<soapenv:Header/>
<soapenv:Body>
答案 0 :(得分:2)
.net
案例中的默认命名空间,则不需要。在SoapUI中,它使用显式名称空间,因此使用prefix
。您可以找到有关名称空间 here。例如,举个例子。以下两者都是一样的。
<vnsState_request xmlns="http://www.statewide.Request.com">
<!--the above one is using default namespace -->
和
<ns:vnsState_request xmlns:ns="http://www.statewide.Request.com">
<!--using explicit namespace "ns", hence the same is prefixed for the tag -->
如果你看看SoapUI中的那个,它在第一行中添加了命名空间。所以,它正如你所展示的那样使用。
希望这有帮助。