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

StackOverflow https://stackoverflow.com/questions/2447417

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть следующая проблема:Мне нужно обрабатывать только 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>");
        }
    }
} 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top