0

ServiceHost、Channel、または Dispatcher がメッセージを処理する前に、アタッチするイベントが存在する必要がありますか? OperationContext.Current を介してアクセスできると想定していますが、見つけることができる最も近いイベントは Opening と Closing です。MessageReceived や BeforeMessageProcessed イベントのようなものはありますか?

イベントを使用しない場合、ServiceHost SingletonInstance が現在 DataContract を処理しているかどうかを判断するために、WCF クラス/構成を使用する他の方法はありますか?

編集: IDispatchMessageInspector (AfterReceiveRequest および BeforeSendReply) は完璧です。約 8 つのサービスがあり、現在処理しているメッセージ (DataContracts) を知る必要があります。デリゲートを受け取り、BeforeReceive(); を実行するヘルパー メソッドのようなものを使用することは可能ですが、InvokeDelegate(); AfterReceive(); IDispatchMessageInspector と動作を使用する方がはるかに簡単です。

4

1 に答える 1

4

私の知る限り、サービス ホスト レベルで直接そのようなイベントはありません。何を達成しようとしているのか説明していただけますか?

通常、メッセージが到着するたびに実行する必要がある処理がある場合、適切な方法は、IDispatchMessageInspectorなど、WCF が提供するいくつかの拡張ポイントの 1 つを使用することです。この場合、サービスまたはエンドポイントの動作を通じてメッセージ インスペクターを WCF パイプラインに挿入します。

于 2009-09-02T22:36:05.990 に答える