ASP.NET Как обрабатывать только 1 HTTP-обработчик одновременно от указанного пользователя?
Вопрос
У меня есть следующая проблема:Мне нужно обрабатывать только 1 запрос одновременно от каждого пользователя.Давайте предположим, что сервер идентифицирует каждого пользователя по идентификатору userId, отправленному в строке запроса.Как заставить сервер работать так же, как FIFO (не начинайте обрабатывать следующий запрос, пока предыдущий не будет полностью обработан)?Должен ли я использовать именованные мьютексы внутри HTTP-обработчика и присвоить имя мьютексу по идентификатору пользователя?
Заранее спасибо, Валентин
Решение
Когда придет первый запрос, установите флаг в сеансе.Сбросьте этот флаг только после завершения обработки первого запроса.
Если пользователь запрашивает снова, не выполнив первый запрос, просто отклоните запрос, вернувшись из 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>");
}
}
}