ASP.NET 线程与 Windows 服务

ASP.NET Thread vs Windows Service

我正在开发使用 ASP.NET (C#) & SQL Server 2000 开发的业务应用程序。我想开发一种机制来自动从我的 SQL 每 5 分钟从服务器数据库到 sybase 数据库。

据我目前所知,有两种方法可以实现。

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

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

所以我的问题是:

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

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

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

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

最后,只是迭代它,while(true) 也许会为你做这个。但是,在大多数情况下,您只会搬起石头砸自己的脚。

我建议使用 Windows 服务,或任何

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

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

除此之外,我建议考虑 SQL 服务器本身来为您完成这项工作。这是另一个演示如何执行此操作的答案:Execute stored procedure from a Trigger after a time delay; create the jobs in the SQL Agent Job. https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job