我正在尝试在不同平台上托管的服务之间建立一些通信:.net< - > java的。我不可能在Java部分中更改任何内容。这是我们无法访问的第三方软件。
我的麻烦基本上归结为服务期望(使用SoapUI测试)和WCF发送的内容(通过跟踪测试)的细微差别。
预期(或至少允许):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ser="http://servicenamespace/">
<s:Header />
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ser:method >
<param1/>
<param2>xxx</param2>
<param3>zzz</param3>
</ser:method>
</s:Body>
</s:Envelope>
.NET实际上尝试发送的内容:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header/>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<method xmlns="http://servicenamespace/">
<param1/>
<param2>xxx</param2>
<param3>zzz</param3>
</method>
</s:Body>
</s:Envelope>
如你所见,差异是微妙的。 servicen期待的是头标记中的名称空间声明...... 有没有办法解决这个问题,最好是以低影响(例如不拦截和改变消息)的方式?也许通过其他方式使用属性?
答案 0 :(得分:0)
不,差异不如您想象的那么微妙,而且与命名空间声明的位置无关。它是关于paramX
元素的命名空间。
在您的第一个示例中,paramX
元素位于 null -namespace;
在您的第二个示例中,paramX
元素位于http://servicenamespace/
。
这种差异必须在您的邮件正文的XML Schema中显而易见,并且您用于从Schema构建代码的工具必须遵守这一点。因此,您可以对代码构建工具或生成的代码进行干预。