繁体   English   中英

没有活动的服务器。 后台任务将不被处理

[英]There are no active servers. Background tasks will not be processed

我有一个问题,已经几天了,但仍然没有解决方案。

我在C#Web应用程序日志中发现了此异常。

[2015-12-03 13:56:06] [错误] [] [执行“服务器引导程序”组件时发生错误。 将在00:05:00秒内重试执行(尝试2147483647的120)。] [System.Data.SqlClient.SqlException(0x80131904):用户“ A网络帐户”的登录失败。

在我看来,它正在使用网络帐户访问SQL数据库,并且因为未授予该网络帐户访问数据库的权限,因此登录失败并且服务器无法启动。

但是,当我转到Hangfire仪表板时,可以看到重复的作业,在我看来,hangfire可以使用正确的帐户访问数据库以检索重复的作业。

另外,在IIS服务器中,我们已经将应用程序池的标识设置为“ ApplicationPoolIdentity”。 因此,我们应该使用虚拟帐户而不是网络帐户。

我是否可以知道有人遇到类似的问题并找到解决方案。 非常感谢您的帮助!

我在将Hangfire与SQL Server和EntityFramework Code First结合使用时遇到了相同的问题,其中EntityFramework负责创建数据库,因此,该建议完全基于这种情况。

如果您使用的是EF Code First,则直到第一次创建并访问上下文后,才会创建数据库。

这意味着在“应用程序启动”中,您的数据库可能不存在。 Hangfire不会创建数据库,它只会在现有数据库中创建表。

因此,您可能会看到的是:

  1. 不存在数据库。
  2. 您的应用程序启动,并且Hangfire尝试使其运行,由于EF尚未创建数据库,服务器进程将引发错误。
  3. 由于hangfire服务崩溃对应用程序来说不是致命的,因此Web应用程序启动完成。
  4. Web应用程序中的某些内容会调用EntityFramework。
  5. EF运行并创建数据库(目前可能没有hangfire表)
  6. 您访问hangfire仪表板后,hangfire现在可以连接,并且看到表不存在,因此可以创建它们。 (现在您将在数据库中看到表)
  7. 仪表板现在可以查看数据库并向您显示统计信息(可能有0台服务器正在运行),因此看起来一切正常。

我解决问题的方法是确保即使数据库为空(不是表),也至少要创建它。 hangfire可以访问它以安装它的表并启动,而EF可以访问它并创建它的模式。

另外,(也许不是),GlobalConfiguration.Configuration.UseSqlServerStorage()应该在其他Hangfire启动配置之前先运行。

希望有帮助!

史蒂夫

您应该创建后台作业服务器实例,请参见此处的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM