如何强制ASP.NET分别处理用户的请求?

问题描述 投票:0回答:2

是否可以在 ASP.NET WebApi 中分别处理并发用户请求?我不想通过限制来忽略用户请求,也不想添加用户会话,因为我有用户 UUID。由于多线程问题,我希望将用户请求添加到队列中,并且每当前一个请求完成时,就会发生下一个请求。

编辑:
我有一个 Android 应用程序并使用改造。客户端有可能同时发送两个请求,IIS 将在两个不同的线程中处理它。我希望具有特殊 UUID 的用户请求分别在管道中处理,而不是同时处理。

编辑:
我想要在 ASP.NET https://camo.githubusercontent.com/ab3d320b740b881b173a7f19b6e02a01326ad1dc/68747470733a2f2f7374726f6e676c6f6f702e636f6d2f77702d636f6e74656 e742f75706c6f6164732f323031342f30312f746872656164696e675f6a6176612e706e67

asp.net multithreading asp.net-web-api
2个回答
1
投票

为了对来自特定客户端的请求进行排队,您可以使用命名锁:

private readonly ConcurrentDictionary<string, object> lockDict = new ConcurrentDictionary<string, object>();

然后在服务器端处理程序中获取用户 ID 并确保一次只有一个线程可以处理它:

void ProcessRequest()
{
    string userId = GetUserIdFromRequest();
    lock (lockDict.GetOrAdd(userId, s => new object()))
    {
        // do the actual processing here and return response to the client.
    }
}

但请注意,此方法仅适用于单个服务器环境。如果您有服务器场,您将需要使用分布式命名锁实现。

另请注意,如果您有来自同一客户端的数百个并发请求,并且这些请求需要时间来执行,这将阻塞它们并危及服务器上的工作线程,最终影响其他请求。

我个人建议您检查当前的设计,并更多地考虑无状态架构。


© www.soinside.com 2019 - 2024. All rights reserved.