[英]How to Force ASP.NET to Handle User's Request respectively?
是否可以分别在ASP.NET WebApi中处理并发用户请求? 我不想忽略用户请求,也不想添加用户会话,因为我有用户UUID。 由于多线程问题,我希望将用户请求添加到队列中,并且每当上一个请求完成时,下一个请求就会发生。
编辑:我有一个Android应用程序,并使用翻新。 客户端可能同时发送两个请求,而IIS将在两个不同的线程中处理该请求。 我希望具有特殊UUID的用户请求分别在管道中而不是在同一时间处理。
为了排队来自特定客户端的请求,您可以使用命名锁:
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.