Hangfire - .net 核心 web api - IIS 实现错误

Hangfire - .net core web api - IIS Implementation Error

当我尝试在 Web 服务器 IIS 上发布 Web api 时,我遇到了一个错误的 hangfire 实现。 (WServer 2012) 当我在 IIS Express 上的计算机主机上启动时,它在本地工作。它运作良好,我在仪表板上看到了我的工作。我在 web 服务器 db 上使用相同的连接字符串,但它在 web 服务器上不起作用。错误是这样的;

Category: Hangfire.Processing.BackgroundExecution EventId: 0

Execution BackgroundServerProcess is still in the Failed state for 00:00:30.0352717 due to an exception, will be retried no more than in 00:00:15

Exception: System.Data.SqlClient.SqlException (0x80131904): Login failed for user 'ABC SERVER'. at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken) at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)

在 ConfigureServices() 方法中;

services.AddHangfire(_ => _.UseSqlServerStorage(Configuration.GetConnectionString("HangfireDbConn"), new SqlServerStorageOptions
            {
                CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                QueuePollInterval = TimeSpan.Zero,
                UseRecommendedIsolationLevel = true,
                UsePageLocksOnDequeue = true,
                DisableGlobalLocks = true
            }));

在 Configure() 方法中;

app.UseHangfireDashboard("/jobs");
 app.UseHangfireServer();

相同的数据库连接、本地 pc 调试模式工作正常但在网络服务器上发布时,我从网络服务器收到登录失败错误之间有什么区别?

有什么解决办法吗?感谢大家的支持。

我找到了解决问题的方法。实际上,我发现我的错误实施点。它是关于连接 user grant 和 auth 信息。在 Hangfire Sql 服务器配置页面中有解决我的问题的方法。我为 Hangfire 创建了一个新用户。然后,为这个用户定义 auth 和 grant 操作。之后,我从连接字符串中删除 trusted connection 定义。现在,它正在工作。

CREATE USER [HangFire] WITH PASSWORD = 'strong_password_for_hangfire'
GO

IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE [name] = 'HangFire') EXEC ('CREATE SCHEMA [HangFire]')
GO

ALTER AUTHORIZATION ON SCHEMA::[HangFire] TO [HangFire]
GO

GRANT CREATE TABLE TO [HangFire]
GO

更多:https://docs.hangfire.io/en/latest/configuration/using-sql-server.html

谢谢大家!