-1

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

类别:Hangfire.Processing.BackgroundExecution EventId:0

由于异常,执行BackgroundServerProcess在00:00:30.0352717仍处于Failed状态,将在00:00:15内重试

异常:System.Data.SqlClient.SqlException (0x80131904):用户 'ABC SERVER' 登录失败。在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,布尔 applyTransientFaultHandling,字符串 accessToken)在 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 调试模式工作正常但在 Web 服务器上发布,我从 Web 服务器收到登录失败错误有什么区别?

有什么解决方案吗?感谢大家的支持。

4

1 回答 1

0

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

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

谢谢大家!

于 2020-02-10T14:39:14.293 回答