база данных hangfire не создана после установки

#hangfire

#hangfire

Вопрос:

Я установил hangfire с помощью Nuget.

 PM> Install-Package Hangfire
  

Затем обновил класс запуска OWIN следующими строками:

 public void Configuration(IAppBuilder app)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage("MySqlConnection");

    app.UseHangfireDashboard();
    app.UseHangfireServer();
}
  

Я назвал имя строки подключения в web.config именем строки подключения в UseSqlServerStorage.

web.config:

 <connectionStrings>
    <add name="MyEntities" connectionString="metadata=res://*/CRMModelContext.csdl|res://*/CRMModelContext.ssdl|res://*/CRMModelContext.msl;provider=System.Data.SqlClient;provider connection string=amp;quot;data source=.;initial catalog=xxx;persist security info=True;user id=sa;password=123;MultipleActiveResultSets=True;App=EntityFrameworkamp;quot;" providerName="System.Data.EntityClient" />
    <add name="MySqlConnection" connectionString="User ID=sa;Initial Catalog=xxx;Password=123;Integrated Security=False;Data Source=." />
  

В системе установлен SQL Server 2008 R2, но базы данных для hangfire в ней нет.

Наконец, когда я запускаю программу, появляется ошибка ниже.

Моя работа:

 BackgroundJob.Enqueue<Receiver>(x=>x.EmailReceiving());
RecurringJob.AddOrUpdate<Receiver>(x => x.EmailReceiving(), Cron.MinuteInterval(15));
  

ошибка:

  JobStorage.Current property value has not been initialized. You must set it before using Hangfire Client or Server API. 
  

Ответ №1:

Я изо всех сил пытался найти правильное решение в Интернете, затем, поспрашивая, я понял, что мне следует создать datatable на сервере самостоятельно, тогда таблицы будут созданы hangfire после запуска приложения.

В принципе, есть 3 основные строки кода, которые я вставил в свое приложение, чтобы заставить hangfire работать: (веб-приложение netcore) (в startup.cs)

 public void ConfigureServices(IServiceCollection services)
{
    ......
    string connectionString = "getYourConnectionStringHere";
    services.AddHangfire(x => x.UseSqlServerStorage(connectionString));
    services.AddHangfireServer();
    ...... 
}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ....
    app.UseHangfireDashboard("/hangfire"); //this is to set the url for hangfire, e.g. localhost://xxxx/hangfire
    ...
}
  

Комментарии:

1. Correct me if I'm wrong : Если вы используете SQL Server, вы также можете рассмотреть возможность добавления имени входа в роль DDLAdmin для соответствующей базы данных (DataWriter недостаточно) или создания схемы самостоятельно: docs. hangfire.io/en/latest/configuration /… .

Ответ №2:

GlobalConfiguration.Configuration.UseSqlServerStorage("MySqlConnection"); используется MySqlConnection в качестве строки подключения, а не значения MySqlConnection !

Вы используете сервер MsSql или MySQL Server?

Попробуйте :

 GlobalConfiguration.Configuration.UseSqlServerStorage(ConfigurationManager.ConnectionStrings["MySqlConnection"].ConnectionString);
  

Комментарии:

1. используется с сервера MsSql. я использую ваш код, но все равно получаю ту же ошибку: JobStorage. Текущее значение свойства не было инициализировано…

2. Добавьте это перед var connectionString = ConfigurationManager.ConnectionStrings["MySqlConnection"].ConnectionString и каково содержимое connectionString ?

3. Я проверил сейчас. Таблицы создаются в базе данных, но я также получаю эту ошибку

4. Проверьте, что соединение допустимо. Проверьте, где возникает ошибка, это после инициализации hangfire.

5. я вызываю BackgroundJob.Enqueue<Приемник>(x=>x.EmailReceiving()) , повторяя задание. Добавить обновление<Приемник>(x => x.EmailReceiving(), Cron. Минутный интервал(15)) в application_start() в global.asax. в них произошла ошибка.