ASP.NET 如何一次仅处理来自指定用户的 1 个 HTTP 处理程序?

发布于 2024-08-25 08:23:26 字数 172 浏览 6 评论 0原文

我有下一个问题:我一次只需处理每个用户的 1 个请求。假设服务器将每个用户标识为 UserID,在查询字符串中发送。 如何使服务器像 FIFO 一样工作(在前一个请求完全处理完之前才开始处理下一个请求)? 我应该在 HTTP 处理程序中使用命名互斥体并通过 UserID 将名称分配给互斥体吗?

提前致谢, 瓦伦丁

I have the next problem: I need to process only 1 request at a time from each user. Lets assume that server identifies each user be UserID, sent in query string.
How can make the server work the way like FIFO (do not start processing next request until the previous is fully processed)?
Should I use the named mutexes inside HTTP handler and assign the name to mutex by UserID?

Thanks in advance,
Valentin

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天荒地未老 2024-09-01 08:23:26

当第一个请求到来时,在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>");
        }
    }
} 

When the first request comes, Set a flag in Session. Reset this flag only after the processing of the first request completes.

If the user requests again, without having the first request completed, just reject the request by returning from ProcessRequest() without any further line of code executed. Additionally you can reply the user back with appropriate status-message.

EDIT

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>");
        }
    }
} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文