将 Hangfire 与 ServiceStack 结合使用

gjs*_*aho 3 servicestack hangfire

有没有办法从 ServiceStack 服务启动 Hangfire 后台作业?我已经能够从 MVC 中启动作业,我可以在其中解析 ServiceStack 服务,但我希望能够从 ServiceStack 中执行此操作。

gjs*_*aho 5

经过更多调查后,我遇到了这个没有 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);
Run Code Online (Sandbox Code Playgroud)

此外,您可以将 ServiceStack Funq 用于 HangFire JobActivator:

JobActivator.Current = new FunqJobActivator(container);
Run Code Online (Sandbox Code Playgroud)

after creating FunqJobActivator as follows:

    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;
    }
Run Code Online (Sandbox Code Playgroud)