【问题标题】:Can multiple requests affect users in one single IIS instance?多个请求会影响单个 IIS 实例中的用户吗?
【发布时间】:2020-09-17 22:56:05
【问题描述】:

我的申请有问题。这是一个在 IIS 10 上设置的 ASP.NET 应用程序。

假设一个系统页面可供 20 个用户访问。该页面完美运行(编码没有逻辑错误)每个操作都有效并提供用户请求的预期值。

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

我随机考虑测试那个确切的场景(同时与另一个用户添加不同的值),我第一次在 QA 服务器上看到它发生。我们已经设法多次重现该错误。

虽然我们不排除这可能是另一个问题的可能性,但还有其他人遇到过类似的情况吗?

问题是:IIS 能否毫无问题地管理相同的请求,在同一个实例中同时多次?它是在多个线程上运行的还是类似的?

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

【问题讨论】:

  • 是的,IIS 可以很好地处理它。如果它不能,就不会成为一个 Web 服务器。听起来您的网络应用程序中存在错误。
  • 此类异常通常是由于开发人员没有将多线程考虑在内的编写不当的代码造成的。例如,System.Collections.Generics 中的类不是线程安全的,因此添加/删除操作需要适当的锁定。
  • 如果您发布一个问题,其中包含重现错误的代码段,那么这里有很多内容可以提供帮助。但是,我同意@lexLi 的观点,即您使用的是跨线程共享的集合,该集合不是线程安全的。也许您在 Global.asax 中创建它并使用它。您需要查看docs.microsoft.com/en-us/dotnet/standard/collections/…

标签: asp.net request instance iis-10


【解决方案1】:

坚持你的问题
是的,IIS 可以非常轻松地处理(也更高效)
根据您没有代码的应用程序问题,我无法指出,但您可能会考虑几点

  1. 是只针对一种方法还是针对所有方法。如果它只发生在一个人身上,则意味着您正在尝试使用可能被其他用户使用的此类代码
  2. 您正在使用这样的数组或列表,它对其他用户为空或为空。就像一个用户的名字后跟 姓氏 但其他用户不填写姓氏,而您正在使用该姓氏属性
  3. 您可能正在使用 HttpContext 并尝试将其用于不同的用户
  4. 可能是您使用的类型不是 线程安全

    所以这些可能是可能的情况,但没有代码我们不能假设。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多