ASP.NET Как обрабатывать только 1 обработчик HTTP одновременно от указанного пользователя? - PullRequest
1 голос
/ 15 марта 2010

У меня следующая проблема: мне нужно обрабатывать только 1 запрос от каждого пользователя. Предположим, что сервер идентифицирует каждого пользователя как UserID, отправленный в строке запроса. Как заставить сервер работать так же, как FIFO (не начинать обработку следующего запроса, пока предыдущий не будет полностью обработан)? Должен ли я использовать именованные мьютексы внутри обработчика HTTP и назначить имя мьютексу по идентификатору пользователя?

Спасибо заранее, Валентин

1 Ответ

2 голосов
/ 15 марта 2010

Когда приходит первый запрос, установите флаг в сеансе.Сбросьте этот флаг только после завершения обработки первого запроса.

Если пользователь запрашивает снова, не выполнив первый запрос, просто отклоните запрос, вернувшись из 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>");
        }
    }
} 
...