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

本文关键字:消息 类型 分配 运行时 自定义 编码器 WCF | 更新日期: 2023-09-27 18:17:34

我目前正在构建自己的WCF编码器,将解析我的消息。我想动态地改变当我发送回复时分配的内容类型,但我不能得到我的头在哪里寻找它。

是否使用CustomTextEncoder。是ContentType还是innerencoder的内容类型?我怎样才能强迫他将响应发送为"文本/xml"或"应用程序/soap+xml"?

提前谢谢你。

EDIT -只是为了澄清我需要在自定义编码器的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";
        ...
     }
}

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

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

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

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

似乎不能改变入站请求的内容类型,我的问题是通过使用消息检查器我分配我想要的内容类型来解决的。(这个链接帮助了我)

很高兴知道 -来自编码器的ack不通过消息检查器,所以它使用ContentType-property.