実行中のサービスのすべてのエンドポイントにメッセージインスペクターを自動的に追加するために使用するカスタムServiceHostを作成しました。IDispatchMessageInspectorとIClientMessageInspectorを実装するMessageInspectorを作成し、それをすべてのエンドポイントに追加することになっている次のコードを見つけました。
foreach (ChannelDispatcher channel in this.ChannelDispatchers) {
foreach (EndpointDispatcher endpoint in channel.Endpoints) {
endpoint.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector());
}
}
私が遭遇した問題は、servicehostが開かれるまでChannelDispatchersコレクションが空であるということです。これは、コンストラクターでこのコードを実行できないことを意味します。Openedイベントのイベントハンドラーを作成し、代わりにそのコードを使用しましたが、エンドポイントを追加しようとすると、次のエラーが発生します。
This value cannot be changed after a ServiceHost has been opened
私はある種のキャッチ22に巻き込まれているようですが、私が求めている機能はWCF内で可能ですか?
ありがとう、
マイク