5

我有一个 .NET 4 Web 应用程序,它关联了 3 个独立的项目——DAL、BAL 和 UI。我正在使用实体框架进行数据库交互。

我的代码循环遍历一堆数据库数据,根据找到的内容调用方法,然后更新数据库。我希望这段代码一直运行。同时,我希望用户能够在后台代码不断运行的同时登录并运行报告等。

对此有什么好的方法?我是为不断运行的代码创建一个服务、一个单独的线程、为不断运行的代码创建一个完全独立的项目,还是另一种方法......?

另外,根据给出的答案,我将如何启动不断运行的代码?即只是通过表单加载方法还是有更好的方法?我目前通过单击开始按钮来启动代码;这对于测试很好,但在生产中不起作用。

4

4 回答 4

5

您最适合将Windows 服务用于始终运行的任务

在 IIS 下的单独线程上运行代码不是一种可靠的机制,因为 IIS 可以随意终止线程以节省服务器资源。

于 2012-08-13T14:47:46.467 回答
2

鉴于您的问题和对其他答案的澄清:

  1. 您的解决方案在无法安装服务的托管环境中运行;
  2. 从第三台服务器(即 Azure 等)调用它不是您的选择;

您最好在 Application_Start 事件中启动一个线程来管理数据库工作。您可能希望确保该线程有一些周期性的空闲时间,以免占用过多的托管环境并确保它在您的应用程序结束或重新启动时关闭。

服务确实是最佳的,但是如果您在托管环境中并且不能/不会使用另一台服务器,那么这是不可能的。

于 2012-08-13T18:28:02.500 回答
0

使用 Windows 服务。还应该考虑将存储过程用于您提到的数据库交互。在启动 Windows 服务方面,您可以将其设置为自动启动(当操作系统启动时),这意味着它将一直运行直到终止。

于 2012-08-13T14:50:44.277 回答
0

我只会推荐一个 Windows 服务,如果它真的一直在运行。但是,“总是”通常意味着每 x 秒/分钟/小时/天。

如果 x 大于几分钟,我会将其设为控制台应用程序并通过 Windows 任务计划程序运行它。这样您就不必担心内存泄漏和许多其他问题。

但是,如果它只与数据库一起使用,我会推荐一个存储过程和一个 Sql Job。

于 2012-08-13T15:02:12.467 回答