2012-04-24 8 views
0

私はここでこれに似た質問を見ることができますが、特に同じことは何もありません。サーバ上のWCFリクエストのリクエストとレスポンスの値のログ

クライアントがAPIキーを使用してクエリできるWCF公開APIがあります。したがって、次のようなものがあります。

string GetDataForRegion(string apiKey, int regionId); 

これらのリクエストは、クライアントに返されたデータとともに記録する必要があります。 IDispatchMessageInspectorを使用して応答を得ることができますが、要求パラメータを取得できる場所がわかりません。

これは、IParameterInspectorを使用すると表示されますが、要求と応答をどのように結びつけるのですか。

理想的には、私は(DB内)のログにこのような何かを書きたいんだ:

のDateTime、APIKEY、MethhodCalled、パラメータ、レスポンス

SP、上記のサンプルを使用して、それはだろう:

2012-04-24-15-52-11、myapikey、GetDataForRegion、{regionId:1}、[応答データ]

が可能この範囲内でありますあなたはWCFに組み込まれていますか?

おかげで、

K

+0

は、あなただけではなく、このためにトレースWCFを使用することができ、またはそれは、ロギングのいくつかのカスタムフォームする必要がありますか。 –

+0

私はトレースを見ていましたが、出力を簡単に表示して照会できる形式にする必要があります。だから、おそらくデータベースに書き込む必要があります。トレースログをデータベースに解析することは、私が「それをする必要はないと思っています」という解決策のリストに載っています。 –

答えて

3

IParameterInspectorあなたが望むものです。サーバー側では、ユーザーコードが呼び出される前にBeforeCallメソッドが呼び出され、このメソッドから状態値を返すことができます(通常はGuidになりますが、これは何でもかまいません)。サービスが実行されて生成されると返り値AfterCallは、同じ状態値で一致するBeforeCallから呼び出されます。クライアント側では、基本的に同じ方法で動作しますが、サーバーへの往復の前後で呼び出しが行われる点が異なります。

あなたの場合、おそらく段階的に情報を記録するのが最も簡単でしょう。インバウンドコール中に要求データをデータベースに挿入し、コールから何らかの一意の識別子(IDフィールド、タイムスタンプなど)を返します。リターントリップで、一致するレコードを応答データで更新します。また、これにより、コールがどのくらいの時間がかかったか、また、コールが返されなかったかどうかを簡単に確認することができます。

http://blogs.msdn.com/b/endpoint/archive/2011/04/28/wcf-extensibility-iparameterinspector.aspx

ます。また、同じ目的のためにIDispatchMessageInspectorを使用することができ、それは基本的には同じように動作しますが、あなたは離れて涙する必要があります。ここでは

は、コードでこれらの作品は、どのように簡単な紹介ですオブジェクトおそらくパラメータインスペクタははるかに優れたオプションです。メッセージインスペクタはより強力で、「より単純な」オプションがある場合でもより一般的に使用されるようです。参照:

http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx

+0

最善の方法のように見えます。私は似たようなものを見て、IDispatchMessageInspectorからの応答を入力していましたが、データを取得するだけで問題はありました(そして設定は苦痛になります)。 IParameterInspectorでデータが利用可能であることを認識していないので、多くの時間を節約できます。ありがとう! –

関連する問題