【问题标题】:ASP.NET- How to monitor Database Tables Periodically?ASP.NET-如何定期监控数据库表?
【发布时间】:2009-08-14 13:17:25
【问题描述】:

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

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

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

  1. 线程
  2. Windows 服务
  3. 其他

是否有任何示例可以证明这一点?

【问题讨论】:

  • 你能为你的帖子想出一个更好的标题吗?谢谢。
  • 你为什么使用asp.net这个标签?
  • 我同意这一点 - 你几乎不能比这更模糊......,仍然看到我的答案。

标签: c# asp.net background scheduling


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      为什么管理员需要每 15 分钟被 ping 一次?可怜的管理员!

      我会在您的用户表中的每个条目上放置一个时间戳,并创建一个快速报告,以便管理员在需要时查询数据。

      【讨论】:

      • :) 我们的建筑师如何设计 HLD
      • 哎哟!我假设您所在的组织一旦获得批准就会强迫您按照 HLD 生活。 :-)
      • 给自己找个新建筑师 :)
      【解决方案4】:

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

      • 将用户添加到 XML 文件作为创建用户的最后一步。
      • 在请求时按需生成 XML 文件。这将以极少的开销为您提供实时信息。

      【讨论】:

        【解决方案5】:

        Windows 服务会为您提供一个很好的解决方案 - 或者,如果您使用的是 SQL Server,您可以从 SQL 代理作业触发这种处理。

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

              【解决方案8】:

              既然您似乎要将某一天的所有用户添加到一个 XML 文件中(根据您的帖子),为什么您需要每 15 分钟执行一次?在午夜之后这样做一次还不够吗?

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

              马克

              【讨论】:

              • 这是访客跟踪网站;它必须在 15 分钟内向管理员报告是否有新条目。
              • 好的,那么我会支持其他建议使用 Windows NT 服务来处理此问题的人 - 扫描用户表以了解自上次扫描以来的更改(跟踪上次扫描日期)和将更改填充到 XML 文件中
              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

                我赞同 Chuck 的回答 - 您可以使用 XML 查询从数据库中提取这些数据并直接发送,无需在系统上创建文件。

                【讨论】:

                  猜你喜欢
                  • 2011-07-30
                  • 1970-01-01
                  • 2011-03-10
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多