3

我创建了一个自定义 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 中寻求的功能是否可行?

谢谢,

麦克风

4

1 回答 1

3

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

于 2010-12-29T20:23:09.750 回答