2012-03-29 8 views
1

データベース(SQL Server)からいくつかのレポートを取得するトランザクションの数をカウントします。私はEF4.1をデータベースのやり取りに、MVC3をクライアントに使用しています。MVC3トランザクションカウンタ

誰もが(コントローラーやレポジトリサービスなどで)やり方と行うのが最善の方法を提案することはできません。

ユーザーを1時間あたり最大100トランザクションに制限したいと考えています。この制限の後、私はユーザーとログアウトをロックします。前もって感謝します!!

+0

私は質問を理解しているか分かりません。ユーザーが実行するクエリの数、またはDBへの書き込み回数をカウントしますか? –

+0

これらのいずれか。私は実際にメインフレームから情報を取得し、ユーザーが何か要求するたびにSQLデータベースに入れています。だから、私は1時間当たりメインフレームから(したがってSQLによって)最大100のレポートをチェックするようにユーザーを制限したい。 – Aman

答えて

1

これは明らかにビジネスロジックなので、 "アクション"(決定)はビジネスロジックレイヤーにある必要があります。

DBでは、1日あたりのクォータ消費量のテーブルを保持し、ユーザーがカウントされた操作(特定のレポートの取得やデータベースへの書き込みなど)を実行するたびにそのテーブルを更新します。つまり、ビジネスロジックには、そのような操作ごとに消費されたクォータカウンタを更新するための命令が含まれています。

ユーザーの消費されたクォータを読み取る検証ロジックをビジネスレイヤーに追加し、そのユーザーの1日のクォータに達していない場合にのみ検証(つまり、許可)します。

必要に応じて毎日クォータをクリーンアップしますが、アカウンティングのためにクォータをクリーンアップすることもできます。

+0

このクォータは、ユーザーあたり1時間あたり100です。ですから、レポートを追加するたびにSQLにアクセスするたびに、カウンタとそのトランザクションが行われる時刻を更新する必要があります。最後の100回の取引の時間を確認しますか?いいですか? :) – Aman

+0

「時間別」の定義方法によって異なります。それはちょうど1と2の間にありますか?2と3の間に再びありますか、それとも60分ごとに100のレポートですか?次に、最後の60分間に消費されたアイテムの数を取得します(タイムスタンプが60分未満の場所)。この数が100より小さい場合は、トランザクションを許可することができます。トランザクションが(ビジネスロジックで)合格すると、そのテーブルにトランザクションが記録されます。 –

+1

60分ごとに100レポートです。だから私は新しいテーブルを追加する必要があります - レポートIDと日付 - 時間ごとにユーザーごとのtransanctionのログ。ユーザーが新しいトランザクションを作成した後にレポートテーブルを更新しているため、レポート数を使用できません。 – Aman

1

MvcApplicationクラスのRegisterGlobalFiltersメソッドでグローバルに(すべてのコントローラに渡って)適用できるActionFilterAttributeを調べてみます。 MvcApplicationで次に

public class FilterTrafficAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Log and track visitor count for the hour here, and decide if they 
     // should proceed on or not. 
     // You can also change the ActionResult of the request by altering the 
     // filterContext.Result. 
    } 
} 

:ような何か

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandlerErrorAttribute()); 

    // add this line: 
    filters.Add(new FilterTrafficAttribute()); 
} 

次にあなたが保証している、それがすべてのコールに適用され、ハンドリング性の多くを持っています。興味があるかもしれない他の上書きがありますActionFilterAttribute

+0

私はActionFiltersの大ファンです。しかし、私はここでそれを使用することはできないようです。私はレポートの取得中に新しいテーブルに時間を記録しようとします。 – Aman