在运行时添加WCF消息检查器

时间:2010-12-28 16:05:46

标签: wcf listener endpoints idispatchmessageinspector

我创建了一个自定义ServiceHost,我想用它来自动将消息检查器添加到其上运行的服务的每个端点。我创建了一个实现IDispatchMessageInspector和IClientMessageInspector的MessageInspector,并找到了应该将它添加到每个端点的以下代码:

foreach (ChannelDispatcher channel in this.ChannelDispatchers) {
  foreach (EndpointDispatcher endpoint in channel.Endpoints) {
      endpoint.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector());
   }
}

我遇到的问题是ChannelDispatchers集合在打开servicehost之前是空的,这意味着我无法在构造函数中运行此代码。我为Opened事件创建了一个事件处理程序,并在那里使用了该代码,但是在尝试添加端点时出现以下错误:

This value cannot be changed after a ServiceHost has been opened

似乎我遇到某种Catch 22,我在WCF中寻求的功能是什么?

谢谢,

麦克

1 个答案:

答案 0 :(得分:3)

为了将消息检查器添加到服务端点,必须通过实现IServiceBehavior或IEndpointBehavior来完成。对于我最终使用的ServiceBehavior,我将上面的代码放在IServiceBehavior的ApplyDispatch()方法中。然后我强制性地将行为添加到我的ServiceHost中,尽管我可以通过创建BehaviorExtensionElement来完成配置。