为后台进程构建 Blazor 应用程序的指南
Guidance on architecting an Blazor App for Background Processes
我正在寻找如何解决这个问题的方向。这是我的一个个人项目,目的是学习更多关于网络技术的信息,因为我上次接触这些东西是在 Macromedia
还在营业的时候。
我有两个程序。都是.NET CORE 3.1
写成C#
.
Email
控制台应用程序
Blazor
服务器端单页 Web 应用程序
Email
控制台应用程序 运行 每 15 minutes
检查一次 Google Gmail
帐户是否收到任何新电子邮件。如果这样做,来自电子邮件的某些元数据将被解析并存储在 SQL
数据库中。是的,我知道我不必每隔 15 minutes
轮询一次电子邮件,因为 Google
有推送支持。
Blazor
网络应用程序只是一个 HTML
table,其中单个 table 单元格根据 SQL
数据库实时更改进行更新时尚。您可以将此 table 视为某种仪表板。
现在我系统上的两个程序 运行。
现在,我的问题是:
如果我想摆脱 Email
控制台应用程序并替换其在 Blazor
网络应用程序中的功能,我将使用哪些库或技术让后台服务自动轮询 Gmail
帐户每 15 minutes
。我非常精通 C#
,但是当涉及到网络内容时,我仍然是一个菜鸟,所以我只是在寻找可以研究的东西以了解更多信息。不确定 Microservice
是否有意义。
感谢您提出任何建议。最终,我计划在 Microsoft Azure
中托管此 Blazor
网络应用程序供我个人使用。
我们正在为我们的 WebAssembly 应用程序(可能与 Blazor-server 类似)执行此操作,我们实现它的方式是在 .NET Core 中使用 hosted services
。参见 these microsoft docs
在您的服务器上,在 Startup.cs 中,您在 public void ConfigureServices(IServiceCollection services)
中初始化了一个托管服务
// Start up a background service / watcher to monitor fatal errors
services.AddHostedService<FatalExceptionMonitor>();
然后我们的 FatalExceptionMonitor
class 继承自 BackgroundService
,并且有一个方法 ExecuteAsync
会被自动调用:
protected override async Task ExecuteAsync(CancellationToken cancelToken)
{
// The way background services run every X minutes is putting a Task.Delay inside a while loop
while (!cancelToken.IsCancellationRequested)
{
try
{
// Do stuff here
}
catch (Exception ex)
{
}
// The way background services run every X minutes is putting a Task.Delay inside a while loop
// Pause for X minutes
int.TryParse(_configuration["FatalExceptionMonitor:HowOftenToRunInMinutes"], out int HowOftenToRunInMinutes);
await Task.Delay(1000 * 60 * HowOftenToRunInMinutes, cancelToken);
}
}
我正在寻找如何解决这个问题的方向。这是我的一个个人项目,目的是学习更多关于网络技术的信息,因为我上次接触这些东西是在 Macromedia
还在营业的时候。
我有两个程序。都是.NET CORE 3.1
写成C#
.
Email
控制台应用程序Blazor
服务器端单页 Web 应用程序
Email
控制台应用程序 运行 每 15 minutes
检查一次 Google Gmail
帐户是否收到任何新电子邮件。如果这样做,来自电子邮件的某些元数据将被解析并存储在 SQL
数据库中。是的,我知道我不必每隔 15 minutes
轮询一次电子邮件,因为 Google
有推送支持。
Blazor
网络应用程序只是一个 HTML
table,其中单个 table 单元格根据 SQL
数据库实时更改进行更新时尚。您可以将此 table 视为某种仪表板。
现在我系统上的两个程序 运行。
现在,我的问题是:
如果我想摆脱 Email
控制台应用程序并替换其在 Blazor
网络应用程序中的功能,我将使用哪些库或技术让后台服务自动轮询 Gmail
帐户每 15 minutes
。我非常精通 C#
,但是当涉及到网络内容时,我仍然是一个菜鸟,所以我只是在寻找可以研究的东西以了解更多信息。不确定 Microservice
是否有意义。
感谢您提出任何建议。最终,我计划在 Microsoft Azure
中托管此 Blazor
网络应用程序供我个人使用。
我们正在为我们的 WebAssembly 应用程序(可能与 Blazor-server 类似)执行此操作,我们实现它的方式是在 .NET Core 中使用 hosted services
。参见 these microsoft docs
在您的服务器上,在 Startup.cs 中,您在 public void ConfigureServices(IServiceCollection services)
// Start up a background service / watcher to monitor fatal errors
services.AddHostedService<FatalExceptionMonitor>();
然后我们的 FatalExceptionMonitor
class 继承自 BackgroundService
,并且有一个方法 ExecuteAsync
会被自动调用:
protected override async Task ExecuteAsync(CancellationToken cancelToken)
{
// The way background services run every X minutes is putting a Task.Delay inside a while loop
while (!cancelToken.IsCancellationRequested)
{
try
{
// Do stuff here
}
catch (Exception ex)
{
}
// The way background services run every X minutes is putting a Task.Delay inside a while loop
// Pause for X minutes
int.TryParse(_configuration["FatalExceptionMonitor:HowOftenToRunInMinutes"], out int HowOftenToRunInMinutes);
await Task.Delay(1000 * 60 * HowOftenToRunInMinutes, cancelToken);
}
}