【问题标题】:WCF Custom encoder - Assigning message content type at runtimeWCF 自定义编码器 - 在运行时分配消息内容类型
【发布时间】:2014-08-12 14:18:38
【问题描述】:

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

他使用的是 CustomTextEncoder.ContentType 还是内部编码器的内容类型? 如何强制他以“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";

        ...
     }
}

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

【问题讨论】:

    标签: c# wcf soa extensibility wcf-extensions


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复,但我尝试在内部编码器中更改它。我试图只使用我的编码器,但我怀疑它会起作用..
    【解决方案2】:

    似乎无法更改入站请求的内容类型,我的问题已通过使用 Message Inspector 解决,我在其中分配了我想要的内容类型. (这个link帮了我)

    很高兴知道 - 来自编码器的 ACK 没有通过 Message Inspector,因此它使用 ContentType-property。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2012-08-29
      • 2017-08-12
      相关资源
      最近更新 更多