2010-12-28 10 views
3

メッセージインスペクタを実行しているサービスのすべてのエンドポイントにメッセージインスペクタを自動的に追加するカスタムServiceHostを作成しました。私はIDispatchMessageInspectorとIClientMessageInspectorを実装し、すべてのエンドポイントにそれを追加することになっている次のコードを発見したMessageInspectorを作成しました:実行時にWCFメッセージインスペクタを追加する

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

私はに実行し、問題がのServiceHostが開かれるまでChannelDispatchersコレクションが空であることですつまり、コンストラクタでこのコードを実行することはできません。私は、オープンイベントのイベントハンドラを作成し、そこの代わりにそのコードを使用し、その後私は、エンドポイントを追加しようとすると、次のエラーを取得:

This value cannot be changed after a ServiceHost has been opened 

私がキャッチのいくつかの並べ替えに巻き込まだと思えます22、WCF内で可能な機能を探していますか?

おかげで、

マイク

答えて

3

サービスエンドポイントにメッセージインスペクターを追加するためには、これはIServiceBehavior、またはIEndpointBehaviorのいずれかを実装することによって行われなければなりません。私が使い終わったServiceBehaviorの場合、上記のコードをIServiceBehaviorのApplyDispatch()メソッドに置きました。私はその後、行動を私のServiceHostに必然的に追加しましたが、BehaviorExtensionElementを作成することで設定することができました。

関連する問題