WCF自定义MessageEncoder需要自定义行为

时间:2009-07-21 04:16:04

标签: wcf

我为WCF管道编写了一个自定义MessageEncoder,然后在我的app.config中使用BindingElementExtensionElement应用它。

在服务器上,当消息到达时,我的消息编码器需要从流中提取一些信息,并在操作上下文的持续时间内保留它,以便它可以作为响应中的标题返回。标题操作是行为功能的尖叫,所以...... 我想知道,我如何让我的自定义编码器也将自定义行为应用到管道(我将负责在操作上下文中存储这个特殊的'信息') - 编码器基本没用行为,所以我不想依赖用户记住在添加编码器配置时添加行为配置 - 它应该只是自动发生在幕后。

此外,哪里有关于阅读这些管道元素生命周期的良好资源?

由于

2 个答案:

答案 0 :(得分:0)

我为WCF编写了自定义标头和消息检查器,发现这篇文章及其中的一些链接对我有用:

Handling custom SOAP headers via WCF Behaviors

HTH

答案 1 :(得分:0)

您基本上有两种选择:

1)要么通过属性公开你的行为,要么可以将它添加到服务器的配置文件中 - 如下所示:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <YourCustomMessageEncoderBehavior />
        </behavior>
      </serviceBehaviors>
    </behaviors>

2)或者您可以创建自己的自定义ServiceHost,确保将此行为添加到调度行为列表中(如果它尚不存在)。

class YourCustomServiceHost : ServiceHost
{
    public YourCustomServiceHost(Type serviceType, params Uri[] baseAddresses)
           : base(serviceType, baseAddresses) { }

    protected override void ApplyConfiguration()
    {
        base.ApplyConfiguration();     

        YourCustomMessageEncodingBehavior behavior = 
           this.Description.Behaviors.Find<YourCustomMessageEncodingBehavior>();

        if (behavior == null)
        {
           behavior = new YourCustomMessageEncodingBehavior();
           this.Description.Behaviors.Add(behavior);
        }
        else
        {
           return;
        }
    }
}

马克