【发布时间】:2012-04-01 03:00:45
【问题描述】:
我们正在使用提供给我们的 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>
【问题讨论】:
-
我们尝试了 xmlserializer 和 DataContractSerializer,结果相同。
-
他们期望什么样的编码。我有一个类似的问题,我的 XML 是有效的,但在我发送 UTF-16 时编码应该是 UTF-8。如果问题仍然相关......
-
这个问题仍然很重要。我们很快就会完成,需要解决这个问题以确保一致性。您是如何解决编码问题的?
-
我扩展了
StringWriter并通过默认返回Encoding.UTF8覆盖Encoding属性。然后使用这个StringWriterUTF8类将其注入XmlWriter -
到目前为止,我们一直让 WCF 为我们处理所有序列化。我一直希望避免编写我们自己的序列化,但我认为由于这个问题,这可能是不可避免的。
标签: wcf serialization soap svcutil.exe