5

我在此处写了关于在 wcf 生成的 SOAP 消息中自定义名称空间和名称空间前缀的方法。

但是,为了自定义消息的 SOAP 标头,我找不到在 Message 类中覆盖的适当方法。

我想发出这样的信息:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<h:Protocol xmlns="http://www.xyz.de/Protocol" xmlns:h="http://www.xzy.de/Protocol">
<version>IFD_1.4</version>
</h:Protocol>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</s:Body>
</s:Envelope>

看起来像这样:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<if:Protocol xmlns="http://www.xyz.de/Protocol" xmlns:if="http://www.xzy.de/Protocol">
<version>IFD_1.4</version>
</if:Protocol>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</s:Body>
</s:Envelope>

不同之处在于第一个标头的命名空间是“if”而不是“f”。

有没有办法使用带有自定义 Message 类的自定义 MessageFormatter 来做到这一点?

4

2 回答 2

3

我找到的解决方案是从 MessageHeader 类派生并在我的自定义 Message 类中使用它(请参阅问题中的链接以了解我如何使用自定义 Message 类来自定义信封和正文开始标记)。

一旦准备好,我将用一个完整的例子来更新答案。

如果您对此有不同的解决方案,请将其发布为更简单的答案,该答案不会破坏 wcf 的功能。

于 2014-02-04T12:57:40.863 回答
0

您可以使用自定义 MessageEncoder,并且在 ReadMessage 和 WriteMessage 方法中,您可以对 xml 执行任何您喜欢的操作。

于 2014-02-10T20:31:21.540 回答