5

さまざまな一般的な理由から、ASP.NET アプリケーションでトレースを使用したいと考えました。特に、強力な方法でトレースを調べることができるService Trace Viewerツールを使用できる可能性があることを知って以来.

私はこれまでこの痕跡を使ったことがなかったので、勉強を始めました。Google、SO、および MSDN をしばらく使用した後、ようやく物事がどのように機能するかについての良いアイデアが得られました。しかし、私はまた、非常に気がかりなことを1つ見つけました。

ASP.NET アプリケーションでトレースを使用する場合、Web 要求によってトレース メッセージをグループ化することは非常に理にかなっています。特に私がそれを使いたい理由の 1 つは、パフォーマンスの問題を研究するためです。上記のツール<Corrleation>は、生成された XML ファイルでタグを使用することにより、これもサポートします。これは から来ていSystem.Diagnostics.Trace.CorrelationManagerます。また、アクティビティの開始/停止などの他の優れた機能も使用できます。これにより、トレース メッセージをより適切にグループ化できます。かっこいいでしょ?

私もそう思っていましたが、CorrelationManager実際に住んでいた場所を調べ始めるまでは。結局のところ、それは静的プロパティでした。Reflector をいじってみたところ、恐ろしいことがわかりましたCallContextASP.NET で使用してはいけないものはどれですか?

それで...ここで何か足りないのですか?ASP.NET のトレースには本当に根本的な欠陥がありますか?

追加:うーん、私はこの内容を自分で書き直そうとしているところです。痕跡を探索するためにきちんとしたツールを使いたいと思っています。これをしてはいけない理由はありますか?おそらく、まだ何か良いものがありますか?すぐに答えが得られたら本当にいいですね。:)

追加 2:私の同僚は、これが単なる理論上の問題ではないことを確認しました。彼は、彼が取り組んでいるシステムでこれを観察しました。それで解決です。私は自分のやりたいように物事を行う新しい小さなシステムを構築するつもりです。:)

追加 3:うわー、すごい... Microsoft の担当者は、ASP.NET で Correlation Manager を使用することに何の問題も見つけられませんでした。結局、どうやらこのバグの修正は得られていないようです...

4

2 に答える 2

3

あなたは非常に興味深い質問を提起します。Reflector を見ると、CorrelationManager が CallContext を使用してアクティビティ ID を格納していることもわかります。私はトレースにあまり取り組んでいないので、トレースが追跡するアクティビティの種類を代表して話すことはできませんが、上記で参照した記事に従って、ページ リクエストのライフ サイクル全体にわたって単一のアクティビティを追跡する場合、アクティビティ ID が実際のアクティビティと関連付けられなくなる可能性があります。このアクティビティは、途中で終了するように見えます。

HttpContext は、実行が別のスレッドに変更された場合でも引き継がれるため、ページ要求全体を最初から最後まで追跡するのに理想的です。ただし、CallContext のように、HttpContext はビジネス オブジェクトに転送されません。余談ですが、クライアント アプリとサーバー アプリの間でリモーティングを使用する場合にも CallContext を転送できることがわかりました。

まだ行っていない場合は、この男のサイトをチェックしてください。この記事で説明されている問題は、Cup(Of T) の記事で言及されている問題と特に同じではありませんが、それでもかなり興味深いものです。彼はまた、CorrelationManager のコンポーネントを説明するページで、非常に有益なリンクをいくつか提供しています。

残念ながら、あなたの質問に対する答えはありませんが、このトピックは興味深いものであり、引き続き調査を続けます。したがって、詳細がわかり次第、この投稿を更新してください。これを調べている間に、あなたや他の人 (誰かがこのトピックに光を当ててくれることを願っています) が何を見つけるのか、私は興味があります.

とにかく、頑張ってください。これについて私の仕事の何人かの覗き見と話し、何か見つけたら後でもっと投稿します.

クリス

于 2009-02-12T08:17:14.867 に答える
1

よし、これで終わりだ。

私の同僚が Microsoft に電話して、このバグを報告しました。認定パートナーであるということは、より優先順位の高い修正キューまたは何かにアクセスできることを意味します...そのようなことは知りません. とにかく、彼らはそれに取り組んでいます。うまくいけば、すぐにパッチが表示されます。:)

それまでの間、私は独自の小さなトレーシング クラスを作成しました。デフォルトのトレース フレームワークがサポートしているすべての機能をサポートしているわけではありませんが、私が必要としているのはそれだけです。:) すなわち:

  • デフォルトと同じ XML 形式で書き込まれるXmlWriterTraceListenerため、このツールを使用してログを分析できます。
  • ログローテーションが組み込まれています-私の同僚が自分でやらなければならなかったことXmlWriterTraceListener.
  • 実際のロギングは別のスレッドに延期されるため、パフォーマンスをより正確に測定できます。
  • 相関関係は に格納されるようになったHttpContext.Itemsため、ASP.NET スレッドの特性は影響しません。

ハッピーエンド、願っています。:)

于 2009-02-13T14:31:18.597 に答える