【问题标题】:Automating REST API data to csv with C#使用 C# 将 REST API 数据自动转换为 csv
【发布时间】:2021-08-27 09:39:48
【问题描述】:

我有使用 GET 调用从 API 带回的数据。我将它存储到 .csv,但对于 C# 和 Visual Studio 包来说都是新的。数据将在一夜之间更新,因此我需要这个包每天运行。我要问的是通过 SQL 服务器,我通常会将存储过程添加到 SQL 作业并设置调度程序。自动化 C# 脚本的最佳实践是什么? Windows 任务计划程序是最佳选择吗?或者有没有首选的解决方案?

【问题讨论】:

  • 您应该澄清您使用的是 dotnetCORE 还是 dotnetFRAMEWORK。答案可能略有不同。如果您正在“部署”到云环境或本地。
  • 是的,windows任务调度器是个不错的选择

标签: c# api rest scheduled-tasks


【解决方案1】:

您可以为此创建一个heartbeat 任务。一般来说,您需要一个心跳管理器,这是一个具有无限循环的类,并安排了一段时间的睡眠,因此它不会占用您的资源。

睡觉

你需要一个

while (true) {
    //Perform the tasks
    Thread.Sleep(1000); //Sleeps for a second
}

在您的心跳管理器中。

心跳接口

建议为您的心跳任务创建一个interface,它有一个IsActive 布尔方法Run 和一个Join。您的所有任务(最初您将只有一个任务,但此方法支持多个任务)都需要实现此接口。

管理任务

在您的无限循环中,您将需要一个 IEnumerable 或 IHeartbeat(或您为 interface 指定的任何名称)元素并循环 IEnumerable 的元素,如下所示:

while (true) {
    for (IHeartbeat hb in myHeartbeats) {
        if (hb.IsActive()) hb.Run();
    }
    Thread.Sleep(1000);
}

正在同步

您可能希望同步您的作业。最好的方法是初始化一个空的List 作为while 的第一步,在foreach 循环中添加每个hb 其IsActive 是true 到List 和之后foreach 循环有另一个 foreach 循环,您可以在其中调用 hb.Join()。

心跳任务的实现

您需要实施IHeartbeat 以确保一致性,并且在后台您需要为已启动的作业创建一个Thread,以便该作业可以正常工作,您可以在需要时使用Join。

活跃

检查当前时间是否满足要运行的作业的条件(我们是否在正确的时间)。

运行

创建一个Thread 并使用它来执行作业的批量。

加入

致电myThread.Join()。

时间

为简单起见,睡眠时间为 1000 毫秒,或者在本例中为 1 秒,但您可能需要根据自己的需要稍微增强一下。

【讨论】:

    【解决方案2】:

    从源获取数据到sql server。

    (一种方式)(C#“中心”)

    在 DotNetCore 世界中。

    https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-5.0&tabs=visual-studio

    在 ASP.NET Core 中,后台任务可以实现为托管服务。托管服务是具有实现 IHostedService 接口的后台任务逻辑的类。本主题提供了三个托管服务示例:

    在计时器上运行的后台任务。 激活范围服务的托管服务。范围服务可以使用依赖注入 (DI)。 按顺序运行的排队后台任务。

    这将是读取源数据“CSV”并将数据发送到 Sql Server 的代码。

    已经有几个“读取 csv”nuget 库可用。

    例如:

    https://www.nuget.org/packages/CsvHelper/

    =========

    (另一种方式)(Sql Server“以”为中心)

    https://docs.microsoft.com/en-us/sql/integration-services/ssis-how-to-create-an-etl-package?view=sql-server-ver15

    https://www.sqlshack.com/how-to-import-export-csv-files-with-r-in-sql-server-2016/

    ============

    然后您创建一个“WebApi”项目,该项目将从 SqlServer 中读取......并提供数据。

    ========

    关于“托管服务”,这里有更多信息:Does it make sense to run a c# worker service in docker?

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 2019-05-01
      • 2016-11-08
      • 1970-01-01
      • 2012-05-16
      • 2015-04-12
      • 2022-12-12
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多