将 Hangfire 与 ServiceStack 结合使用
Using Hangfire with ServiceStack
有没有办法从 ServiceStack 服务启动 Hangfire 后台作业?
我已经能够从 MVC 中开始工作,在那里我可以解析 ServiceStack 服务,但我希望能够从 ServiceStack 中执行此操作。
经过更多调查后,我发现了这个 post setup example without owin?。
一种解决方法是不安装整个 Hangfire nuget 包,只安装 Hangfire.Core 和 Hangfire.SqlServer(或相应的存储选项),这只需要引用 Owin 包。唯一的缺点是不能使用Hangfire Dashboard。
然后通过以下代码启动Hangfire和任意作业:
JobStorage.Current = new SqlServerStorage("connection string");
var server = new BackgroundJobServer();
server.Start();
RecurringJob.AddOrUpdate(() => System.Diagnostics.Debug.WriteLine("No OWIN"), Cron.Minutely);
此外,您可以将 ServiceStack Funq 用于 HangFire JobActivator:
JobActivator.Current = new FunqJobActivator(container);
创建 FunqJobActivator 后如下:
public override object ActivateJob(Type jobType)
{
var resolved = _container.TryResolve(jobType);
if (resolved == null)
{
foreach (Type it in jobType.GetInterfaces())
{
resolved = _container.TryResolve(it);
if(resolved != null)break;
}
}
return resolved;
}
有没有办法从 ServiceStack 服务启动 Hangfire 后台作业? 我已经能够从 MVC 中开始工作,在那里我可以解析 ServiceStack 服务,但我希望能够从 ServiceStack 中执行此操作。
经过更多调查后,我发现了这个 post setup example without owin?。
一种解决方法是不安装整个 Hangfire nuget 包,只安装 Hangfire.Core 和 Hangfire.SqlServer(或相应的存储选项),这只需要引用 Owin 包。唯一的缺点是不能使用Hangfire Dashboard。
然后通过以下代码启动Hangfire和任意作业:
JobStorage.Current = new SqlServerStorage("connection string");
var server = new BackgroundJobServer();
server.Start();
RecurringJob.AddOrUpdate(() => System.Diagnostics.Debug.WriteLine("No OWIN"), Cron.Minutely);
此外,您可以将 ServiceStack Funq 用于 HangFire JobActivator:
JobActivator.Current = new FunqJobActivator(container);
创建 FunqJobActivator 后如下:
public override object ActivateJob(Type jobType)
{
var resolved = _container.TryResolve(jobType);
if (resolved == null)
{
foreach (Type it in jobType.GetInterfaces())
{
resolved = _container.TryResolve(it);
if(resolved != null)break;
}
}
return resolved;
}