代码之家  ›  专栏  ›  技术社区  ›  Xaqron

用ASP.NET下载服务器如何完成长时间运行的同步请求?

  •  1
  • Xaqron  · 技术社区  · 14 年前

    我的ASP.NET应用程序是一个下载应用程序(无页面),它从本地网络读取巨大的二进制文件(1-2 GB->超过1小时的下载时间,支持恢复),并将它们流式传输到web客户端(每个请求->一个大的二进制响应,因此根本没有文本/html响应)。我使用HTTP处理程序(.ashx)而不是(.aspx)页面来处理请求。使用共享缓冲区和生产者消费者模式主线程(来自ASP.NET线程池)创建另一个线程,它们一起完成任务。最后两个线程都退出(返回池)。

    因此,我有一个使用来自线程池的线程的长时间运行的请求,这通常是不推荐的,但是我的应用程序中没有任何页面,使用来自ASP.NET线程池的线程仍然是一个瓶颈吗?

    对于这种情况,应该考虑什么? 如有任何意见,敬请谅解。

    2 回复  |  直到 11 年前
        1
  •  0
  •   Community c0D3l0g1c    7 年前

    正如我所解释的 here ,使用 IHttpAsyncHandler

    编辑:别忘了打电话 asyncRequestState.CompleteRequest()

        2
  •  0
  •   Andrew Barber Eric Lafortune    14 年前

    如果使用ASP.NET池中的线程来提供这些文件,则无论可用带宽如何,都将很快达到并发下载的硬限制。线程正在做什么并不重要;如果它们都很忙/被阻塞,其他请求将无法满足。

    在如此长的时间内,如果不仔细配置,也可能会遇到其他问题;下载可能最终被取消,应用程序可能不必要地被重置。