1

次の問題があります。各ユーザーから一度に 1 つの要求だけを処理する必要があります。サーバーが各ユーザーを UserID で識別し、クエリ文字列で送信すると仮定します。サーバーを FIFO のように動作させるにはどうすればよいですか (前のリクエストが完全に処理されるまで次のリクエストの処理を開始しないでください)。HTTP ハンドラー内で名前付きミューテックスを使用し、UserID によって名前をミューテックスに割り当てる必要がありますか?

前もってありがとう、バレンティン

4

1 に答える 1

2

最初のリクエストが来たら、Session にフラグを立てます。最初のリクエストの処理が完了した後にのみ、このフラグをリセットします。

ユーザーが最初のリクエストを完了せずに再度リクエストした場合は、それ以上のコード行を実行せずに ProcessRequest() から戻ってリクエストを拒否します。さらに、適切なステータス メッセージでユーザーに返信できます。

編集

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.SessionState;

namespace MyHandlers
{
    public class MyHttpHander : IHttpHandler,IRequiresSessionState
    {
        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.Write("<h1><b>HttpHandler Test</b></h1>");
            context.Session["Test"] = "Invoke a session in HttpHandler.";
            context.Response.Write(context.Session["Test"]+"<br>");
            context.Response.Write("<a href='HttpHandlerCsharp.aspx'><b>return</b></a>");
        }
    }
} 
于 2010-03-15T13:33:32.927 に答える