#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. в них произошла ошибка.