Webアプリケーション(ASP.NET)でクライアントとサーバー間の通信を制御する技術があるかどうか知りたいのですが
例:
- リクエスト数
- リクエストを繰り返さないことを確認します
- 操作が実行されたことを確認します
ワークフロー
- クライアントはリクエスト「A」を送信します
- サーバーはリクエスト「A」を受信し、応答します
- サーバーはリクエスト「A」を回答済みとしてマークします
- クライアントはリクエスト「A」を再送信します
- サーバーは、要求「A」が応答されたと応答します
Webアプリケーション(ASP.NET)でクライアントとサーバー間の通信を制御する技術があるかどうか知りたいのですが
例:
ワークフロー
次の方法で、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
}
どの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
}
}
}
注意として、私はこれらのイベントで重いことをしようとはしません。トラックで並行して実行できる大量のデータベース操作が必要な場合は、スレッドプールの使用中にキューシステムを使用することをお勧めします。