我有一个问题,我已经看了几天,仍然没有解决方案。
我在C#网络应用日志中发现了这个例外。
[2015-12-03 13:56:06] [ERROR] [] [执行期间发生错误 ' Server Bootstrapper'零件。执行将被重试(尝试 120 of 2147483647)在00:05:00秒。] [System.Data.SqlClient.SqlException(0x80131904):登录失败 用户"网络帐户"。
在我看来,它正在使用网络帐户访问SQL数据库,因为该网络帐户未被授予访问数据库的权限,因此登录失败,服务器无法启动。
但是,当我转到Hangfire仪表板时,我可以看到定期作业,在我看来,hangfire可以使用正确的帐户访问数据库以检索定期作业。
此外,在IIS服务器中,我们已将身份设置为" ApplicationPoolIdentity"对于应用程序池。因此,我们应该使用虚拟帐户而不是网络帐户。
我是否知道有人遇到类似的问题并且有解决方案。真的很感谢你的帮助!!
答案 0 :(得分:0)
我使用Hangfire与SQL Server和EntityFramework Code First遇到了同样的问题,其中EntityFramework负责创建数据库,所以这个建议完全基于这种情况。
如果您使用的是EF Code First,则在首次创建和访问上下文之前,不会创建数据库。
这意味着在App Start中您的数据库可能不存在。 Hangfire不会创建数据库,只会在现有数据库中创建表。
所以你可能会看到的是:
我解决它的方法是确保即使数据库为空(不是表),也至少会创建它。这是hangfire可以访问它来安装它的表并启动,EF可以访问它,并创建它的架构。
此外,(可能不是这样),GlobalConfiguration.Configuration.UseSqlServerStorage()应该在其他Hangfire启动配置之前运行。
希望有所帮助!
史蒂夫
答案 1 :(得分:0)
您应该创建后台作业服务器实例,请参阅文档here
答案 2 :(得分:0)
在我的例子中,服务器名称太长,并且有一个 SQL 错误说它会被截断。我只能在 Visual Studio 中关闭 Just My Code 的情况下启动它后才能看到此错误。
故事的寓意:为服务器使用较短的名称,并且不要将您自己的每个实例的唯一标识符附加到它,这样它就不会遇到截断错误。该列是一个 nvarchar(100)
。