WCF自定义编码器 - 在运行时分配消息内容类型

时间:2014-08-12 14:18:38

标签: c# wcf soa extensibility wcf-extensions

我目前正在构建自己的WCF编码器来解析我的消息。我想动态更改我发送回复时分配的内容类型,但我无法理解他正在寻找的内容。

他是使用CustomTextEncoder.ContentType还是innerencoder的内容类型? 我如何强迫他发送回复#34; text / xml"或" application / soap + xml"?

提前谢谢。

编辑 - 只是为了澄清我需要在自定义编码器的WriteMessage方法中做出决定。 我使用的是保存所请求内容类型的字符串属性,但他没有正确执行。

public class MyEncoder : MessageEncoder
{
    private string _contentType = "application/soap+xml";

    public override string ContentType
    {
        get
        {
            return _contentType;
        }
    }

    public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
    {
        ...

        if (_MY_CONDITION_HERE_)
        {
            _contentType = "multipart/related";
        }
        else
            _contentType = "application/soap+xml";

        ...
     }
}

不幸的是,当我发送消息时,他仍在分配我的编码器的默认值...

2 个答案:

答案 0 :(得分:1)

是的,您可以覆盖编码器中的内容类型以控制发送的内容。然后,您可以选择是否要委托内部编码器或提供自己的值。

public override string ContentType
{
    get
    {
        //return this.inner.ContentType;
        //return "text/xml";
    }
}

答案 1 :(得分:1)

似乎无法更改入站请求的内容类型,我的问题是通过使用消息 检查器修复的,其中我指定了我想要的内容类型。 (这link帮了我)

相关提示 - 来自编码器的ACK未通过Message Inspector,因此它使用ContentType属性。