使用 C# 将 REST API 数据自动化为 csv
Automating REST API data to csv with C#
我有使用 GET 调用从 API 带回的数据。我将它存储到 .csv,但是对于 C# 和 Visual Studio 包来说都是新的。数据将在一夜之间更新,因此我需要这个包每天 运行。我想问的是通过 SQL 服务器,我通常会将存储过程添加到 SQL 作业并设置调度程序。自动化 C# 脚本的最佳实践是什么? Windows 任务计划程序是最佳选择吗?或者对此有更好的解决方案吗?
从源获取数据到 sql 服务器。
(单向)(C#“中心”)
在 DotNetCore 世界中。
在ASP.NET Core 中,后台任务可以作为托管服务实现。托管服务是 class 具有实现 IHostedService 接口的后台任务逻辑。本主题提供三个托管服务示例:
运行计时器上的后台任务。
激活作用域服务的托管服务。作用域服务可以使用依赖注入 (DI)。
按顺序 运行 排队的后台任务。
这将是读取源数据“CSV”并将数据发送到 Sql 服务器的代码。
已经有几个“读取 csv”nuget 库可用。
例如:
https://www.nuget.org/packages/CsvHelper/
=========
(另一种方式)(Sql 服务器“中心”)
https://www.sqlshack.com/how-to-import-export-csv-files-with-r-in-sql-server-2016/
============
然后您创建一个“WebApi”项目,该项目将从 SqlServer 读取……并将数据服务器化。
========
关于“托管服务”,这里有更多信息:
您可以为此创建一个 heartbeat 任务。通常,您需要一个心跳管理器,它是一个具有无限循环的 class,并安排了一段时间的休眠,因此它不会耗尽您的资源。
睡觉
你需要一个
while (true) {
//Perform the tasks
Thread.Sleep(1000); //Sleeps for a second
}
在您的心跳管理器中。
心跳接口
建议为心跳任务创建一个 interface
,它有一个 IsActive
布尔方法 Run
和一个 Join
。您的所有任务(最初您只有一个任务,但这种方法支持多个任务)都需要实现此接口。
管理任务
在你的无限循环中,你需要一个 IEnumerable
of 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 毫秒,或者在这种情况下更简单地说是一秒,但您可能希望根据需要稍微增强它。
我有使用 GET 调用从 API 带回的数据。我将它存储到 .csv,但是对于 C# 和 Visual Studio 包来说都是新的。数据将在一夜之间更新,因此我需要这个包每天 运行。我想问的是通过 SQL 服务器,我通常会将存储过程添加到 SQL 作业并设置调度程序。自动化 C# 脚本的最佳实践是什么? Windows 任务计划程序是最佳选择吗?或者对此有更好的解决方案吗?
从源获取数据到 sql 服务器。
(单向)(C#“中心”)
在 DotNetCore 世界中。
在ASP.NET Core 中,后台任务可以作为托管服务实现。托管服务是 class 具有实现 IHostedService 接口的后台任务逻辑。本主题提供三个托管服务示例:
运行计时器上的后台任务。 激活作用域服务的托管服务。作用域服务可以使用依赖注入 (DI)。 按顺序 运行 排队的后台任务。
这将是读取源数据“CSV”并将数据发送到 Sql 服务器的代码。
已经有几个“读取 csv”nuget 库可用。
例如:
https://www.nuget.org/packages/CsvHelper/
=========
(另一种方式)(Sql 服务器“中心”)
https://www.sqlshack.com/how-to-import-export-csv-files-with-r-in-sql-server-2016/
============
然后您创建一个“WebApi”项目,该项目将从 SqlServer 读取……并将数据服务器化。
========
关于“托管服务”,这里有更多信息:
您可以为此创建一个 heartbeat 任务。通常,您需要一个心跳管理器,它是一个具有无限循环的 class,并安排了一段时间的休眠,因此它不会耗尽您的资源。
睡觉
你需要一个
while (true) {
//Perform the tasks
Thread.Sleep(1000); //Sleeps for a second
}
在您的心跳管理器中。
心跳接口
建议为心跳任务创建一个 interface
,它有一个 IsActive
布尔方法 Run
和一个 Join
。您的所有任务(最初您只有一个任务,但这种方法支持多个任务)都需要实现此接口。
管理任务
在你的无限循环中,你需要一个 IEnumerable
of 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 毫秒,或者在这种情况下更简单地说是一秒,但您可能希望根据需要稍微增强它。