我为WCF管道编写了一个自定义MessageEncoder,然后在我的app.config中使用BindingElementExtensionElement应用它。
在服务器上,当消息到达时,我的消息编码器需要从流中提取一些信息,并在操作上下文的持续时间内保留它,以便它可以作为响应中的标题返回。标题操作是行为功能的尖叫,所以...... 我想知道,我如何让我的自定义编码器也将自定义行为应用到管道(我将负责在操作上下文中存储这个特殊的'信息') - 编码器基本没用行为,所以我不想依赖用户记住在添加编码器配置时添加行为配置 - 它应该只是自动发生在幕后。
此外,哪里有关于阅读这些管道元素生命周期的良好资源?
由于
答案 0 :(得分:0)
答案 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;
}
}
}
马克