如何使用Worker Service进行SQL查询



我想让Windows服务在一段时间内与数据库连接,并将数据发送到准备好的API。对于web服务,我选择了Worker Services和Tim Corey的教程。问题是,我没有找到任何关于如何创建到数据库的连接、创建SQL查询并将其发送到API的说明。

添加到Program.cs的数据库连接

Program.cs

using Serilog;
using FirebirdSql.Data.FirebirdClient;
namespace WorkerService
{
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.File(@"C:tempworkserviceLogFile.txt")
.CreateLogger();
try
{
Log.Information("Starting up the service...");
CreateHostBuilder(args).Build().Run();
return;
}
catch (Exception ex)
{
Log.Fatal(ex, "There was a problem starting the service");
return;
}
finally
{
Log.CloseAndFlush();
} 
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
var connection = new FbConnection("database=local:3050/C:/TEST.FDB;user=SYSDBA;password=masterkey");
services.AddHostedService<Worker>();
})
.UseSerilog();

以及在哪里或如何添加worker.csSQL查询命令并将其发送到URL,例如

connection.Open();
try
{
FbCommand cmd = new connection.CreateCommand();
cmd.CommandText = "SELECT * FROM user where ID=1";
FbDataReader exist = cmd.ExecuteReader();
return;
}
catch (Exception ex)
{
Log.Fatal(ex, "Connectin error");
return;

最后Command.Text发送给API

private const string URL = "https://web.eu/api";
private const string DATA = Command.Text;
using (var client = new HttpClient())

如果您正在.Net(版本5+(中寻找辅助服务,您可以通过此链接https://learn.microsoft.com/en-us/dotnet/core/extensions/windows-service.

上面的链接来自微软文档,他们解释了如何使用backgroundService构建辅助服务(在.NetFramework上下文中,一个windows服务(。

这和您已经做的类似,只需要添加您的类worker.cs(右键单击项目添加类(。

则需要扩展CCD_ 5。

那么您需要重写BackgroundService类中的ExecuteAsync()方法,在该方法中添加您可以开始添加逻辑。

services.AddHostedService<Worker>() will call `ExecuteAsync()` when service start up.

还有其他方法,如StopAsync() and StartAsync(),用于服务启动和停止逻辑。