【问题标题】:ASP.NET Thread vs Windows ServiceASP.NET 线程与 Windows 服务
【发布时间】:2017-12-15 18:08:03
【问题描述】:

我正在开发一个使用 ASP.NET (C#) 和 SQL Server 2000 开发的业务应用程序。我想开发一种机制,每隔 5 分钟自动将一些数据从我的 SQL Server 数据库传输到 sybase 数据库.

根据我目前的知识,有两种方法可以实现这一点。

  1. 使用计时器在我的 ASP.NET 应用程序中启动一个线程,该线程从 SQL Server 读取数据并写入 Sybase。

  2. 开发一个从 SQL Server 读取数据并写入 Sybase 的 Windows 服务。

所以我的问题是:

  1. 哪个选项最好?
  2. 每个选项的优缺点是什么?
  3. 是否有任何其他方法可用于进行此数据传输?

【问题讨论】:

  • ASP.Net 对于计划任务来说是一个非常糟糕的选择。 SQL 作业可能能够做到这一点。问题太宽泛,无法给出具体答案。
  • 如果您在 ASP.NET 站点中手动启动线程,如果其中一个线程有未处理的异常,您的整个站点将崩溃。对于这类事情,ASP.NET 是一个糟糕的选择。
  • 如何在 Sybase 数据库中使用 SQL 代理作业从 SQL Server 数据库传输数据?

标签: c# asp.net multithreading windows-services


【解决方案1】:

我会为此使用 Windows 服务。 ASP.NET 对于这类任务来说不是一个好的解决方案——毕竟,即使它不发送数据也是如此。除非您考虑Task API,并异步编程 ASP.NET Web 应用程序来执行此操作,否则您将犯错误。还不确定您的环境是否支持所有现代功能(例如Task API 或 SQL Server 中具有所有功能和服务的作业),这就是为什么原生服务将是一个完美的方式。

private async Task saveData() {
    // Copy the data

    // Wait for 5 minutes "asynchronously"
    Task.Delay(5 * 60 * 1000); // 5 minutes
}

最后,只需对其进行迭代,while(true) 或许会为您执行此操作。但是,在大多数情况下,您只会在自己的脚下开火。

我会推荐使用 Windows 服务,或任何

  • 托管
  • 基于定时器
  • 异步

...服务,每 n 分钟执行一次任务。

除此之外,我建议您考虑使用 SQL Server 本身来为您完成这项工作。这是另一个演示如何执行此操作的答案:Execute stored procedure from a Trigger after a time delay;在 SQL 代理作业中创建作业。 https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job

【讨论】:

  • 感谢 Afzaal 的回复。您在回答中提到了 SQL 代理作业。是否可以使用 SQL 代理作业将数据从 SQL SERVER 中的数据库传输到 SYBASE 中的数据库?它们都是两个不同的数据库管理系统。如果我的两个数据库(源和目标)都在同一个 DBMS 中,那么我可以考虑使用 SQL 代理作业。但它可以适用于不同的 DBMS 吗?请解释一下。
  • @Somi,不,你是对的,我只提到触发器。无论如何,还有另一个线程在谈论这个; dba.stackexchange.com/questions/114634/…,反之亦然,将 Sybase 数据库导入 SQL Server —— 你可以稍微颠倒一下。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多