ASP.NET-如何定期监视数据库表?

时间:2009-08-14 13:17:25

标签: c# asp.net background scheduling

我正在使用VS 2008(C#)开发一个网站。我目前的任务是开发一个应该执行以下任务的模块:

  • 每15分钟,一个进程需要与数据库通信,以确定是否通过注册将新用户添加到数据库中的“用户”表中
  • 如果找到新条目,则应将该条目添加到xml文件中(例如NewUsers18Jan2009.xml)。

为了实现这一目标,以下哪一项最合适?

  1. 线程
  2. Windows服务
  3. 其他
  4. 有没有可用的样品来证明这一点?

10 个答案:

答案 0 :(得分:3)

将此任务与您的网站分开。一切网站都通过网络服务器。将逻辑放入类库(因此,如果您需要进行广告按需检查,将来可以使用它),并在控制台应用程序中使用此类。使用Windows“计划任务”功能并将此控制台应用程序设置为每15分钟运行一次。这比通过IIS运行计划任务要好得多。

答案 1 :(得分:3)

听起来你的任务没有任何UI部分。如果是这种情况,请使用Windows服务或计划的应用程序。我会选择一项服务,因为它更容易远程控制。

我在这里看不到与网站的连接......

答案 2 :(得分:2)

为什么世界上管理员需要每15分钟获得一次?管理不善!

我只需在用户表中的每个条目上添加一个时间戳,然后创建一个快速报告,以便管理员在需要时查询数据。

答案 3 :(得分:1)

我认为你的做法是错误的。你应该做两件事之一:

  • 将用户添加到XML文件中,作为创建用户的最后一步。
  • 请求时按需生成XML文件。这将为您提供实时信息,而且开销很小。

答案 4 :(得分:1)

Windows服务可以为您提供良好的解决方案 - 或者如果您使用的是SQL Server,则可以从SQL代理作业中触发此类处理。

如果您希望代码成为Web应用程序的“一部分”,您可以随时从心跳页面触发逻辑,该页面在调用URL时运行您的任务 - 然后您可以从服务或代理工作。

答案 5 :(得分:1)

最简单的方法是在Application_Start上的应用程序中创建一个System.Threading.Timer,并将其放在某个静态字段中,这样就不会收集它。这样,您可以让您的Web应用程序轮询数据库,而无需外部过程。当然,如果您的应用程序出现故障,计时器也会出现故 对于轮询逻辑,只需保留最后一个userId(如果您有增量策略)并通过过滤WHERE id>检查新添加的用户。 lastId。

答案 6 :(得分:0)

创建一个新表(或文本文件),用于存储上次执行“新用户导出”或另外查找上次导出文件的修改/创建日期。当脚本命中数据库时,执行SQL命令以在上次导出后创建所有用户。为每个用户吐出新的XML。

将此脚本设置为以Windows计划任务/ cron作业/甚至是数据库触发器运行。

答案 7 :(得分:0)

由于您似乎将给定日期的所有用户添加到单个XML文件中(根据您的帖子),为什么每15分钟需要执行此操作?午夜过后这样做不够吗?

当你这样做时,最好是在Windows服务中(如果它必须每15分钟运行一次)或者在一个命令行应用程序中,该应用程序计划在例如0:15小时,您只需要检查用户的“注册”日期,如果在过去一天有任何注册,您可以将它们添加到列表中并将该列表导出到XML文件的末尾。处理表格。

马克

答案 8 :(得分:0)

虽然我也投票支持创建Windows服务来为您执行此功能,但我能想到的最简单的方法是在您的“用户”表上设置一个触发器,当您创建xml文件时用户已插入。

答案 9 :(得分:0)

我是Chuck的第二个答案 - 你可以使用XML查询从数据库中提取这些数据并直接发送,无需在系统上创建文件。