Asp.net mvc ASP.NET Mvc+;线程

Asp.net mvc ASP.NET Mvc+;线程,asp.net-mvc,multithreading,Asp.net Mvc,Multithreading,我们需要创建一个web应用程序,在该应用程序中,数据从FTP服务器检索并放入数据库。应该有一个线程负责共享FTP服务器,如果它发现新数据,数据将被下载并插入服务器。我正在考虑在Application_Start中创建一个新线程,但是我不确定这是否是一个安全的解决方案。有谁能提出更好的解决方案吗?不要直接从您的网站上执行此操作。编写windows服务来执行此操作。不要直接从您的网站执行此操作。编写一个windows服务来执行此操作。为什么要将其创建为MVC应用程序?MVC在构建网站时是一个很好的框

我们需要创建一个web应用程序,在该应用程序中,数据从FTP服务器检索并放入数据库。应该有一个线程负责共享FTP服务器,如果它发现新数据,数据将被下载并插入服务器。我正在考虑在Application_Start中创建一个新线程,但是我不确定这是否是一个安全的解决方案。有谁能提出更好的解决方案吗?

不要直接从您的网站上执行此操作。编写windows服务来执行此操作。

不要直接从您的网站执行此操作。编写一个windows服务来执行此操作。

为什么要将其创建为MVC应用程序?MVC在构建网站时是一个很好的框架和方法,但不适合长时间运行的后台任务,如轮询FTP服务器和将数据推送到SQL中

在MVC中不这样做的一个很好的理由是,MVC站点托管在IIS中,IIS专门用于处理需要有限(最好是非常短)持续时间的多个传入请求。如果IIS承载的进程运行时间过长,默认情况下IIS将终止并重新启动该进程。我见过很多人在“背景任务”完成前不断重置时感到困惑(和不安)。虽然可以将IIS配置为使长时间运行的任务运行更长时间,但这样做是非常不明智的,因为这可能会掩盖错误线程陷入死锁或陷入循环并长时间运行的情况


对于此任务,我强烈建议创建Windows服务(和上的示例)。服务在后台运行,可以自动重启(以防崩溃),也可以手动/编程停止、启动和暂停。这些都是您描述的需求类型的关键功能。

为什么要将其创建为MVC应用程序?MVC在构建网站时是一个很好的框架和方法,但不适合长时间运行的后台任务,如轮询FTP服务器和将数据推送到SQL中

在MVC中不这样做的一个很好的理由是,MVC站点托管在IIS中,IIS专门用于处理需要有限(最好是非常短)持续时间的多个传入请求。如果IIS承载的进程运行时间过长,默认情况下IIS将终止并重新启动该进程。我见过很多人在“背景任务”完成前不断重置时感到困惑(和不安)。虽然可以将IIS配置为使长时间运行的任务运行更长时间,但这样做是非常不明智的,因为这可能会掩盖错误线程陷入死锁或陷入循环并长时间运行的情况


对于此任务,我强烈建议创建Windows服务(和上的示例)。服务在后台运行,可以自动重启(以防崩溃),也可以手动/编程停止、启动和暂停。这些都是您描述的那种需求的关键功能。

Phill Haack写了一篇关于在ASP.NET中使用后台任务的好文章。他解释了为什么这不是一个好主意(你可能会关闭应用程序池,使数据处于损坏状态),如果你必须这样做,它是如何完成的


Phill Haack写了一篇关于在ASP.NET中使用后台任务的好文章。他解释了为什么这不是一个好主意(你可能会关闭应用程序池,使数据处于损坏状态),如果你必须这样做,它是如何完成的


我完全同意这一点。不要在网站或服务中进行多线程处理。卸载处理!我完全同意这一点。不要在网站或服务中进行多线程处理。卸载处理!