1

私は今までいつも自分のロガーを書いていたので、このテーマにはあまり満足していません。

WCFRESTWebサービスがあります。このサービスは、エラーから誰がいつ使用するかについての情報をログに記録する必要があります。

そのために、Enterprise Library(5.0)のLoggingApplicationBlockが選択されています。良好なパフォーマンスを維持するために、MSMQを使用することにしました。目的は、ある時点でログをファイルに保存するまで、ログをそこに保存することです。

いくつかのWebサイトで、WCFを使用してメッセージをMSMQに送信してから、別のエンティティを使用してキューを操作したり、MSMQをトランスポートプロトコルとして使用してWCFと通信したりできることを確認しました。今は、LABのLoggerクラスを使用して、ログをキューに挿入しています。

MSMQを使用して、ログ機能からWebサービスの同期を解除するだけです。

だからここに私の質問があります:MSMQがWCFで役立つ場合は何ですか?私が説明する場合、ファイルにいくつかのものを記録するためだけに別のWCFアプリケーションを使用するのはやり過ぎではありませんか?

4

1 に答える 1

2

ここで2つのことを混同していると思います。WCFのMSMQトランスポートはまさにそれであり、HTTPまたはTCPの代わりに使用できるトランスポートメカニズムです。あなたの問題は(私が思うに)WCFサービスから非同期でログを記録したいということです。これは良い考えです。EntLibには、MSMQディストリビューターサービスが含まれています。このサービスは、MSMQを宛先として指定する適切に構成されたログブロック構成を想定して、アプリケーションからキューに書き込まれたログイベントを取得します。その後、ディストリビューターは実際にそれをデータベースに書き込みます。

非同期ロギングは非常に賢明な方法です。これは、たとえばDBが廃止されたような壊滅的な状況で、イベントが永続的なメディアに確実に存在するようにするためです。言うまでもなく、データベースは通常のアプリケーション操作の一部としてアクセスされないため、潜在的な障害点が排除されます。

カスタムデータベースロギングメカニズムを使用していたWebアプリケーションに取り組んだことがあります。DB操作がトランザクション内で行われ、失敗すると(たとえば、ADOからのリレーショナル制約エラー)ログにメッセージが書き込まれる場所がありました...メイントランザクションと一緒にロールバックするだけです。これは、例外処理戦略の一部としてデータベースに直接書き込んでいる場合に発生する可能性のある種類の問題です。

とにかく、これがあなたの質問に答えるかどうかはわかりません。これは、これがすべてEntLibでどのように機能するかについての概要です。

于 2011-10-20T18:48:57.520 に答える