2011-10-20 11 views
1

私はいつも自分のロガーを書いて以来、私は本当にこのテーマに慣れていません。LABについてEntLib、MSMQ、WCF

私はWCF REST Webサービスを持っています。 このサービスは、エラーの情報を誰が使用したのか、いつ使用するのかを記録する必要があります。

これを行うには、Enterprise Library(5.0)からLogging Application Blockを選択します。 優れたパフォーマンスを維持するために、MSMQを使用することにしました。目的は、ある時点でログに記録するまでログを保存することです。

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

MSMQを使用して、ログ機能からWebサービスを非同期にしたいだけです。

ここに私の質問があります: MSMQがWCFに役立つケースは何ですか? 私が記述したケースでは、ファイルにいくつかのものを記録するだけで別のWCFアプリケーションを使うのは過度なことではないのですか?

答えて

2

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

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

カスタムデータベースロギングメカニズムを使用していたWebアプリケーションで作業していましたが、トランザクション内でDB操作が発生し、障害発生時には(ADOの関係制約エラー)、ログにメッセージを書き込んでメイントランザクションと一緒にロールバックさせる場所がありました。これは、例外処理戦略の一環としてデータベースに直接書き込んでいる場合には、あなた自身が抱える問題です。

とにかく、これがあなたの質問に答えるかわかりません。 Here'sこれがEntLibでどのように動作するかについての概要です。

+0

ありがとう、私の面倒な質問にもかかわらず、私の指摘は完全にあります。 – lollancf37

関連する問題