【问题标题】:Considerations for ASP.NET application with long running synchronous requests具有长时间运行的同步请求的 ASP.NET 应用程序的注意事项
【发布时间】:2011-04-29 07:50:08
【问题描述】:

如果 ASP.NET 应用程序(使用 ASP.NET 线程池,同步请求处理)长时间运行(> 30 分钟),则在 windows server 2008 64 位、IIS 7.0 和 .NET 4.0 下。 Web 应用程序没有页面,主要目的是以块(~5 MB)读取大文件(> 1 GB)并将它们传输到客户端。代码:

while (reading)
{
    Response.OutputStream.Write(buffer, 0, buffer.Length);
    Response.Flush();
}

单生产者 - 实现了单消费者模式,因此每个请求都有两个线程。我在这里不使用任务库,但请告诉我在这种情况下它是否比传统的线程创建更有优势。使用 HTTP 处理程序 (.ashx) 代替 (.aspx) 页面。在压力测试下,CPU 利用率不是问题,但是对于单个工作进程,在 210 个并发客户端之后,新连接会遇到超时。这可以通过网络园艺解决,因为我不使用会话状态。我不确定我是否遗漏了任何重大问题,但请告诉我您认为应该考虑哪些其他因素?

例如,由于“连接超时”,IIS 可能会关闭长时间运行的 TCP 连接,因为正常 ASP.NET 页面的处理时间不到 5 分钟,所以我应该增加该值。

我很欣赏你的想法。

【问题讨论】:

  • 我问了一个问题:stackoverflow.com/questions/4007863/…,但仍未得到答复。
  • 不幸的是,stackoverflow 不允许从第一天起就对问题设置赏金。你在这里看到一些编辑后这里是一些与编辑无关的答案。任何新的答案都有更多被接受的机会。
  • 在 WAWS 上,您可以使用 Azure WebJobs。

标签: asp.net configuration iis-7 long-running-processes


【解决方案1】:

就我个人而言,我会为这种类型的处理寻找一种不同的机制。 HTTP 请求/Web 应用程序不是为这种类型的事情设计的,稳定性将非常困难,当您使用这种类型的模型时,您会面临许多可能导致重大问题的风险。

我会将该处理移至后端进程,以便您在 asp.net 运行时之外,这样您就可以更好地控制启动/关闭等。

【讨论】:

  • 发送文件,没有页面发送文件.....那将是我的第一个项目。我需要知道你到底想做什么
【解决方案2】:

不应以这种方式实现长时间运行的进程。将此传递给您设置的服务。

如果您确实想为客户端挂起页面,请考虑从 AJAX 连接到不会阻塞 IO 线程的东西 - 例如 node.js。

由于线程使用,向许多客户端推送通知不是 ASP.NET 可以处理的,因此我的 node.js。如果您的负载较低,您还有其他选择。

【讨论】:

  • 这是一个下载网站。您对大型二元响应有何建议? (请参阅编辑)
【解决方案3】:

Web 1.0 处理长时间运行的进程的方法是在服务器上生成它们并立即返回。让衍生服务更新数据库的进度,并且网站上的页面可以查询进度。

这种技术最常见的用法是获得包裹递送。在我的包出现之前,您无法保持 HTTP 连接打开,因此它只是为您提供了一种查询进度的方法。后台进程负责编排获取物品、包装物品、将物品送上 UPS 卡车等所需的所有步骤。在此过程中,每个步骤都记录在数据库中。从概念上讲,它是相同的。

基于问题编辑:只需立即返回结果页面,并在生成的线程或进程中在服务器上生成二进制文件。使用 Ajax 检查文件是否准备就绪,如果准备就绪,请提供指向它的链接。

【讨论】:

    【解决方案4】:

    首先,从不。绝不。绝不!在线程池线程中执行任何需要超过几秒钟的处理。它们的数量有限,并且它们被系统用于许多事情。这是自找麻烦。

    其次,虽然处理程序是一个好主意,但您对“动态生成”的含义有点模糊您的意思是您正在动态加密文件并且此加密可能需要 30 分钟?或者你的意思是你从数据库中提取数据并组装一个文件?还是说下载需要 30 分钟才能下载完?

    编辑:

    正如我所说,不要将线程池用于任何长时间运行的东西。创建您自己的线程,或者如果您使用的是 .NET 4,请使用 Task 并将其指定为长时间运行。

    【讨论】:

      【解决方案5】:

      使用 Web-Gardening 提高应用程序的稳定性。

      关闭缓存,因为您没有 aspx 页面

      如果没有性能分析,很难提供更多建议。你 VS 内置并找到瓶颈。

      【讨论】:

      • 园艺不是长期运行过程的解决方案。您发布了一个好问题,这不是一个好的答案。看我的回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多