多个请求是否会影响单个IIS实例中的用户



我的应用程序出现问题。这是一个ASP。NET应用程序在IIS 10上设置。

假设一个系统页面可供20个用户访问。页面运行良好(编码时没有逻辑错误(,每个操作都能正常工作,并提供用户要求的预期值。

问题是,每当有人同时请求与另一个用户相同的方法(具有不同的值(时,应用程序就会随机向其中一个用户抛出错误。我们已经检查了日志错误,所有这些都是系统索引超出范围的错误,这在我们的QA服务器中从未发生过。

我随机考虑过测试这个确切的场景(同时与另一个用户添加不同的值(,我第一次在QA服务器上看到了这种情况。我们已经设法多次重现错误。

虽然我们没有放弃这可能是另一个问题的可能性,但其他人经历过这样的事情吗?

问题是:IIS能否在同一实例中同时多次管理相同的请求而不会出现任何问题?它是在多个线程上运行还是类似的东西上运行?

感谢你花时间回答这个问题,如果你需要任何信息

坚持你的问题
是的,IIS可以很容易地处理(也更高效(
根据你的应用程序问题,如果没有代码,我无法指出,但你可能会考虑几点

  1. 这是针对一种方法还是针对所有方法。如果这种情况只发生在一个用户身上,那就意味着你正在尝试使用另一个用户可能使用的代码
  2. 您使用的数组或列表对其他用户来说是null或空的。就像一个用户的名字后面跟有姓氏但其他用户没有填写姓氏,而您使用的是姓氏属性
  3. 可能正在使用HttpContext并尝试对不同的用户使用相同的
  4. 可能是您使用的类型不是线程安全的

关于您的问题,对于来自不同用户的多个请求,iis将在应用程序池中为每个请求创建一个线程。对于来自同一用户的多个请求,它将只在一个线程中运行,并且只影响用户的实例。除非实例或资源是共享资源,并且您的代码不执行任何锁定操作。

IIS(包括大多数web服务器(使用线程来处理请求,因此除非锁定,否则多个请求将并行执行。网络服务器通常具有数量最少和数量最多的工作程序。这些工作程序是根据当前硬件的CPU或内存进行调整的。如果资源耗尽,新的请求将排队,直到有新的资源可用。

因此,您需要做的可能是修改应用程序代码,以考虑多线程和同步。

最新更新