質問

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

WCF REST Webサービスがあります。このサービスは、エラーから誰がそれを使用するかまで情報を記録する必要があります。

そのために、エンタープライズライブラリ(5.0)からのロギングアプリケーションブロックが選択されました。優れたパフォーマンスを維持するために、MSMQを使用することにしました。目的は、ある時点でログをファイルに入れるまでログを保存することです。

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

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

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

役に立ちましたか?

解決

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

非同期伐採は非常に賢明なことです。なぜなら、たとえば、DBが廃止した壊滅的な状況では、イベントが永続的な媒体にあることを保証するからです。言うまでもなく、データベースは通常のアプリケーション操作の一部としてアクセスされず、潜在的な障害点が排除されます。

カスタムデータベースロギングメカニズムを使用していたWebアプリケーションに取り組みました。トランザクション内でDB操作が行われ、障害時に(ADOからのリレーショナル制約エラーなど)、ログにメッセージを書き込む場所がありました...メイントランザクションと一緒にロールバックするだけです。それは、例外処理戦略の一部としてデータベースに直接書いている場合、自分が自分自身に取り込むことができるような問題です。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top