3

Webアプリケーション(ASP.NET)でクライアントとサーバー間の通信を制御する技術があるかどうか知りたいのですが

例:

  • リクエスト数
  • リクエストを繰り返さないことを確認します
  • 操作が実行されたことを確認します

ワークフロー

  1. クライアントはリクエスト「A」を送信します
  2. サーバーはリクエスト「A」を受信し、応答します
  3. サーバーはリクエスト「A」を回答済みとしてマークします
  4. クライアントはリクエスト「A」を再送信します
  5. サーバーは、要求「A」が応答されたと応答します
4

2 に答える 2

2

次の方法で、Global.asaxファイル内のリクエストをインターセプトできます。

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var request = ((System.Web.HttpApplication)(sender)).Context.Request;
        //here you can evaluate and take decisions about the request
    }
于 2012-12-03T15:49:37.390 に答える
0

どのASP.NETアプリケーションでも、HttpApplicationイベントを使用して必要な変更を追跡できます。たとえば、BeginRequestイベントやEndRequestイベントを使用して追跡できます。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if(MyGlobalFlags.TrackingRequests){
        //  do stuff
    }
}

protected void Application_EndRequest(object sender, EventArgs e)
{
    if(MyGlobalFlags.TrackingRequests){
        //  do stuff
    }
}

個人的な意見では、必要に応じて簡単にオフにできるグロブラルフラグを使用します。

ASP.NET MVCアプリケーションについて話している場合は、追跡するアクションでActionFiltersを使用することもお勧めします。独自のActionFilterクラスを実装し、それらの変更OnActionExecutedおよび/またはOnResultExecutedを追跡できます。コードを変更せずに追跡をオフにするには、引き続きグローバルフラグを使用します。

public class MyTrackingActionFilter: ActionFilterAttribute{
    public override OnActionExecuted(ActionExecutedContext filterContext)
    {
           if(MyGlobalFlags.TrackingRequests){
            //  do stuff
        }
    }

    public override OnResultExecuted(ActionExecutedContext filterContext)
    {
           if(MyGlobalFlags.TrackingRequests){
            //  do stuff
        }
    }
}

注意として、私はこれらのイベントで重いことをしようとはしません。トラックで並行して実行できる大量のデータベース操作が必要な場合は、スレッドプールの使用中にキューシステムを使用することをお勧めします。

于 2012-12-03T17:12:41.490 に答える