Trying to get Hangfire going in a .net core application.
I ran dotnet add package HangFire --version 1.7.0-beta2, that seemed to go fine
Created a connection string:
‘“Hangfire”: “Server=localhost,1433;Database=Hangfire;User Id=sa;Password=xxxxxxxxxx;MultipleActiveResultSets=true”’
added services.AddHangfire(s => s.UseSqlServerStorage(Configuration.GetConnectionString("Hangfire"))); to Startup.cs ConfigureServices()
added app.UseHangfireDashboard(); and app.UseHangfireServer(); to Startup.cs Configure()
when app.UseHangfireDashboard();runs it throws an error:
Application startup exception: System.Data.SqlClient.SqlException (0x80131904): Cannot open database "Hangfire" requested by the login. The login failed. Login failed for user 'sa'.
no Hangfire database exists or is created
When in the above process should the database be created/initialized?
I believe it means it cannot connect to your database. Are those the correct login details for your db? I use localdb(sqlexpress) so I just need the basic windows authentication. Connect to the table that you want to connect to using visual studio and get the correct connection string there. That’s my thinking on the error.
We could not determine what the cause was. To get around it, we manually created an empty Hangfire database before re-attempting the above steps. Once we did that, and ran the steps, the tables and such were created in the Hangfire database.
@gtovey
Facing same issue with you. And I have just gone with a workaround solution.
Create an empty Context:
public class HangfireContext : DbContext
{
public HangfireContext(DbContextOptions options) : base(options)
{
}
}
Run migrate before use HangfireServer
// Migrate and seed the database during startup. Must be synchronous.
using (var serviceScope = app.ApplicationServices.GetRequiredService()
.CreateScope())
{
serviceScope.ServiceProvider.GetService().Database.Migrate();
}
Have a look at SqlServerStorageOptions. You should be able to set an option called PrepareSchemaIfNecessary and set it to true. We set ours to false as our process is to create all DBs before deploying code.
I tried the below, but it made no difference. Still get the same error:
"An exception of type ‘System.Data.SqlClient.SqlException’ occurred in System.Data.SqlClient.dll but was not handled in user code
Cannot open database “Hangfire” requested by the login. The login failed.
"
var hangfireOptions = new SqlServerStorageOptions
{
PrepareSchemaIfNecessary = true
};
services.AddHangfire(config =>
{
config.UseSqlServerStorage(@"Server=localhost; Database=Hangfire; Trusted_Connection=True;", hangfireOptions);
});