0

私はここでこれに似た質問を見ることができますが、特に同じものは何もありません。

クライアントが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

4

1 に答える 1

3

IParameterInspectorあなたが望むものです。サーバー側ではBeforeCall、ユーザーコードが呼び出される前にメソッドが呼び出され、このメソッドから状態値を返すことができます(通常、これはGuid何でもかまいません)。サービスが実行されて戻り値が生成されると、 valueAfterCallは、一致するから同じ状態値で呼び出されますBeforeCall。クライアント側では、サーバーへのラウンドトリップの前後に呼び出しが発生することを除いて、基本的に同じように機能します。

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

これらがどのように機能するかをコードで簡単に紹介します。

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

IDispatchMessageInspector同じ目的で使用することもでき、基本的に同じように機能しますが、Messageオブジェクトを自分で分解する必要があります。パラメータインスペクタはおそらくはるかに優れたオプションです。メッセージインスペクターはより強力であり、「より単純な」オプションがある場合でも、より一般的に使用されているようです。見る:

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

于 2012-04-24T21:42:20.007 に答える