我们正在使用提供给我们的WSDL和XSD进行第三方集成。我们已经使用svcutil来为我们生成所有代理类,它们工作正常。当我们使用SoapUi进行测试时,一切正常,但是,当我们尝试将响应发送给我们的合作伙伴时,他们拒绝接收SOAP消息,因为命名空间是在消息头和正文中而不是SOAP信封中定义的。
不幸的是,我无法让我们的合作伙伴更改他们的流程来接受我们的消息(尽管我认为它们在技术上是正确的,因为我们在XML中使用它们之前定义了命名空间,而不是他们期望的那些)。我知道在出去之前我可以让消息检查员按下SOAP消息,但我宁愿不去那个级别的处理。
是否有svcutil的设置,甚至是我们可以设置为让WCF在信封上输出命名空间的序列化属性的设置?
他们想要什么:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:h="http://theirdomain.org/service">
<s:Header>
<h:myType>
<version>V1.0</version>
</h:myType>
</s:Header>
<s:Body>
<h:someElement />
</s:Body>
</s:Envelope>
我们发送的内容:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" >
<s:Header>
<h:myType xmlns:h="http://theirdomain.org/service">
<version>V1.0</version>
</h:myType>
</s:Header>
<s:Body>
<h:someElement xmlns:h="http://theirdomain.org/service"/>
</s:Body>
</s:Envelope>
答案 0 :(得分:2)
我认为正确的扩展点可能是自定义编码器(请参阅http://msdn.microsoft.com/en-us/library/ms735115.aspx或http://msdn.microsoft.com/en-us/library/ee960159.aspx处的示例,尤其是第一个)。在自定义编码器中,您将自己编写SOAP Envelope(使用正确的命名空间),然后调用Message对象上的方法来写出标题和正文(例如WriteBodyContents,请参阅http://msdn.microsoft.com/en-us/library/ms734675.aspx - 在“Writing Messages”下)。