【发布时间】:2020-01-20 20:32:01
【问题描述】:
我的 C# MVC 项目的 Global.asax.cs 文件中有以下设置:
////hangfire config
GlobalConfiguration.Configuration
.UseSqlServerStorage("ContextName", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(15),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
})
.UseRecommendedSerializerSettings();
//.UseLog4NetLogProvider(); // this creates a bunch of logs that inflates the DB, only for testing purposes!
以及我尝试调整的这段代码,但我无法让它在生产中工作,在本地它工作正常。
BackgroundJobServer backgroundJobServer = new BackgroundJobServer();
RecurringJob.AddOrUpdate(() => MethodCalling(DateTime parameter), "0 8 * * *");
这在本地有效,但在我将其发布到我的 Plesk 环境时无效。 我也试过这个:
RecurringJob.Trigger("Identifier here");
当然在 AddOrUpdate 方法中设置了标识符,但我认为每次浏览网站时都会触发。我希望它在一年中的每一天早上 8:00 运行。
尝试改变时间:
"00 * * * *"
设置为每小时运行,每月每天运行,甚至使用过时的Cron.HourInterval(int),但它似乎在我浏览该站点时触发,或者如果我不浏览它每天 +-3 次,似乎可能是 IIS 回收可以循环吗?
我也试过改成这样:
BackgroundJob.Enqueue(()=> MethodCalling(DateTime parameter));
当我检查我的数据库(使用 EF)时,我可以清楚地看到它在运行,但没有正确配置某些内容,但我不知道是什么。
欢迎提出任何建议! 谢谢! (注意:不使用 .NET Core)
【问题讨论】:
-
docs.hangfire.io/en/latest/deployment-to-production/…如果你不能遵循这个,放弃Hangfire。它不是一个可以在所有条件下运行的框架。
-
您好,谢谢您,如果他们愿意在 IIS 中进行这种配置,我将与我的托管服务提供商核实,我将在后端尽我所能。将在这里发布反馈。同时,您能否针对这种需求提出替代方案?
-
@LexLi,不幸的是,我的托管服务提供商不想在他们这边实施此配置,因为它是共享资源......我需要一个托管 VPS 或每天处理 1 个重复工作的替代逻辑。 ..我不想为此使用计时器或任务,我认为这有点矫枉过正?!任何人都可以为我提供替代方案吗?
-
那么实际上是您的预算阻止了您在 ASP.NET 中执行此操作。考虑一下外部服务,例如 Zapier,zapier.com/apps/schedule/integrations 它们可以帮助触发日常事件,然后这些事件可用于向您的 ASP.NET 应用程序发送请求(有效地运行您想要的作业)。
-
我认为应该类似,但 Zapier 有一些免费配额。