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
谢谢大家!
当我尝试在 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
谢谢大家!