3

IClientMessageInspector インターフェイスの BeforeSendRequest メソッドの戻り値に関する情報はあまり見つかりません。私が見つけたすべての例は、常に null を返します。MSDN の説明によると、このメソッドの戻り値は、AfterReceiveReply が呼び出されると、correlationState 引数として返されます。ただし、MSDN では、correlationState に GUID を使用することがベスト プラクティスであるとも述べています。

このステートメントは、correlationState に GUID のみを使用することになっていることを意味すると解釈しているため、やや混乱します。私がやりたいのは、リクエストの xml コンテンツを状態として使用して、返信が失敗した場合に、リクエストと返信の両方をログに記録できるようにすることです。返信が失敗した場合にのみ、リクエストをログに記録したい。

誰もcorrelationStateを使用した経験がありますか? 使いたい用途に使えますか?テストでは機能しているように見えますが、これについて見つけた情報が限られているため、私が見ていない何らかの落とし穴があるのではないかと心配しています.

4

1 に答える 1

6

CorrelationState は、その名前のとおり、送信された要求と受信された応答の間の相関関係を見つけるのに役立つように設計されています。したがって、GUID は一意の識別子であるため、MSDN ではこれを相関状態として使用することをお勧めします。

BeforeSendRequest および AfterReceiveReply メソッドでは、相関状態値と Messages オブジェクトの両方をログに記録し (CreateBufferCopy / CreateMessage およびその他の Message クラス操作を使用)、送信された要求と受信された応答の間で照合を行うことができます。

このソリューション (およびその他の純粋な WCF ソリューション、ところで) では、応答が失敗した場合にのみ要求をログに記録できないことに注意してください。これは、WCF パイプラインに要求と応答の両方がある場所がないためです。

あなたが述べたように、そうする唯一の機会は、メッセージを(文字列または Message オブジェクトとして - 再び Message クラス操作を使用して)相関状態として使用することです。サービス ロジックが同じ入力に対して成功応答と失敗応答を取得できる場合 (たとえば、ロジックがデータベースや他のサービスなどの外部リソースに依存している場合)、これは必ずしも良い考えではありません。

于 2012-09-15T08:24:29.293 に答える