У меня есть приложение MVC5 и реализован HangFire с Autofa c. В своем автозагрузчике Autofact я использую:
GlobalConfiguration.Configuration.UseAutofacActivator(container, false);
Я использую следующий код в файле startup.cs:
public void Configuration(IAppBuilder app)
{
// Configure Hangfire
app.UseHangfireAspNet(GetHangfireServers);
var options = new DashboardOptions{Authorization = new[] { new HangfireAuthorizationFilter() }};
app.UseHangfireDashboard("/hangfire", options);
}
private IEnumerable<IDisposable> GetHangfireServers()
{
GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage("DomainDbConnection", new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.Zero,
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true
});
yield return new BackgroundJobServer();
}
Все работает, как ожидается, и задания успешно выполняются. Мои зависимости разрешены, как и ожидалось.
Теперь я хочу настроить рабочий сервер так, чтобы он всегда запускался, поэтому я следовал: http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html. Я следил за каждым шагом и публиковался на сервере. Нет, когда я запускаю задание, поставленное в очередь, оно терпит неудачу со следующим исключением:
Failed
An exception occurred during processing of a background job.
System.MissingMethodException
No parameterless constructor defined for this object.
System.MissingMethodException: No parameterless constructor defined for this object.
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Hangfire.JobActivator.SimpleJobActivatorScope.Resolve(Type type)
at Hangfire.Server.CoreBackgroundJobPerformer.Perform(PerformContext context)
at Hangfire.Server.BackgroundJobPerformer.<>c__DisplayClass9_0.<PerformJobWithFilters>b__0()
at Hangfire.Server.BackgroundJobPerformer.InvokePerformFilter(IServerFilter filter, PerformingContext preContext, Func`1 continuation)
at Hangfire.Server.BackgroundJobPerformer.PerformJobWithFilters(PerformContext context, IEnumerable`1 filters)
at Hangfire.Server.BackgroundJobPerformer.Perform(PerformContext context)
at Hangfire.Server.Worker.PerformJob(BackgroundProcessContext context, IStorageConnection connection, String jobId)
Я не понимаю, почему я получаю эти ошибки. У кого-нибудь есть подсказка?