繁体   English   中英

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

[英]How to Force ASP.NET to Handle User's Request respectively?

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

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

编辑:我想要在ASP.NET中使用https://camo.githubusercontent.com/ab3d320b740b881b173a7f19b6e02a01326ad1dc/68747470733a2f2f7374726f6e676c6f6f702e636f6d2f77702d636f6e74656e742f75ec6f6164736673163

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

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.
    }
}

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

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

我个人建议您回顾当前的设计,并多考虑一些无状态架构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM