7

現在、Azure アプリケーションのコストを見積もることができるプログラムを作成しています。このために、(Azure) サーバーへの呼び出しを (間接的に) 行うすべてのメソッドをインターセプトするという考えがあります。また、メソッドごとに、それが属するコストの側面を決定します (たとえば、(ストレージ トランザクション、サービスバス トランザクション、トークン要求など))。

これの難しさの 1 つは、クラス/メソッドがモックされているときにメソッド呼び出しも傍受したいため、Azure アプリケーションの開発中にプログラムを (単体) テストでも使用できることです。

クラスのメソッドを「サブスクライブ」する方法があるかどうか疑問に思っていました。そして、このメソッドが呼び出されると、イベントが発生します。または、ストレージトランザクション、サービスバストランザクション、トークンリクエストなどを傍受するための他の(より良い)ソリューションは、たとえばストレージトランザクションを送信するがモックされているクラスに対してもありますか?

前もって感謝します

編集 1: Azure アプリケーションのコストに影響を与えるすべてのクラス/メソッドを含む/知っている (ヘルパー) クラス/ライブラリまたは参照があるかどうかを知っている人はいますか?

EDIT 2 これは上記の問題を達成するための良いアプローチですか? または、代替手段はありますか?

4

7 に答える 7

3

HTTP プロキシを作成し、アプリケーションがそのプロキシを通過するようにします。そうすれば、Windows Azure Storage / Service Bus / ... への各リクエストを実際にインターセプトできます。

AOP は優れたソリューションですが、ニーズには合いません。たとえば、CloudBlob.UploadFileメソッドを取り上げます。AOP の観点からは、これは 1 回の呼び出しですが、HTTP トランザクションの数を見ると、1 回よりも多くの呼び出しになる可能性があります (大きなファイルはチャンクされ、複数の HTTP 要求で送信されます)。

そのため、Windows Azure サービスへのすべての呼び出しを監視する場合は、HTTP プロキシのような低レベルのものを使用する必要があります。

于 2013-01-08T13:04:57.387 に答える
3

Aspect Oriented Programming (AOP)について言及しています。AOP は、オブジェクトとそのメソッドおよびプロパティの間のディスパッチ メッセージのインターセプトを扱います。呼び出しの内容に応じて、ロジックが実行される場合があります。

.NET の AOP フレームワークに関する質問は次のとおりです。

.Net での AOP の最適な実装は何ですか?

于 2012-12-19T21:30:32.213 に答える
0

ログファイルを作成できます。時間とエラーまたは反応を書きます。これは良い解決策です。半分私?

于 2013-01-09T12:10:34.233 に答える
0

プロキシの生成やインターフェイスに基づく動的メソッドの呼び出しなど、最新の C# 設計と思われる作業をいくつか行いました。ブログでは、その仕組みと使用方法について説明しています。

これがあなたのシナリオでうまくいくと確信しています。

関連するリンクは次のとおりです。

デコレータ プロキシ

より一般的な動的メソッドの呼び出しを見つけることができます。

動的メソッド呼び出し

于 2013-01-09T10:56:44.087 に答える
0

メソッドの呼び出しを追跡するためにTrace APIを使用しています。 Windows Azure クラウド アプリケーションで Trace を使用する を読むことをお勧めします。Azure Tables でデータをキャプチャしたら、追跡しているデータに関するレポートを簡単に作成できます (診断レポートと同様)。

于 2013-01-09T02:54:55.690 に答える
0

動的プロキシを使用して、基になるオブジェクトへの呼び出しをインターセプトし、呼び出しに関する詳細を記録して転送するクラスを生成 できる場合があります。

どのようにすべてを配線するのか正確にはわかりませんが、うまくいけば、これで正しい方向に進むことができます.

于 2012-12-19T21:30:35.927 に答える
0

アスペクト指向のソリューションを探しています。PostSharpのようなものがうまくいくはずです。私はそれを使って成功しました。利用可能な他の無料オプションがあるかどうかはわかりません。

于 2012-12-19T21:30:40.293 に答える