【问题标题】:Adding WCF Message Inspectors at Runtime在运行时添加 WCF 消息检查器
【发布时间】:2010-12-28 16:05:46
【问题描述】:

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

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

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

This value cannot be changed after a ServiceHost has been opened

我似乎陷入了某种 Catch 22,我在 WCF 中寻求的功能是否可行?

谢谢,

迈克

【问题讨论】:

    标签: wcf listener endpoints idispatchmessageinspector


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多