2

Topshelf を使用して Windows サービスでホストされている Hangfire インスタンスがあります。

static void Main()
{
    HostFactory.Run(x =>
    {
        x.Service<Application>(s =>
        {
            s.ConstructUsing(name => new Application());
            s.WhenStarted(tc => tc.Start());
            s.WhenStopped(tc => tc.Stop());
        });
        x.RunAsLocalSystem();

        x.SetDescription("Hangfire Windows Service Sample");
        x.SetDisplayName("Hangfire Windows Service Sample");
        x.SetServiceName("hangfire-sample");
    });
}

private class Application
{
    private IDisposable host;

    public void Start()
    {
        host = WebApp.Start<Startup>("http://localhost:12345");

        Console.WriteLine();
        Console.WriteLine("Hangfire Server started.");
        Console.WriteLine("Dashboard is available at {0}/hangfire", configSettings.Jobs.EndPoint);
        Console.WriteLine();
    }

    public void Stop()
    {
        host.Dispose();
    }
}

私の StartUp クラスはかなり基本的なものです。

public void Configuration(IAppBuilder app)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage(
        "DefaultConnection",
        new SqlServerStorageOptions {QueuePollInterval = TimeSpan.FromMinutes(1)});    

    app.UseHangfireDashboard("/hangfire", new DashboardOptions
    {
        AuthorizationFilters = new[] { new AuthorizationFilter() }
    });

    app.UseHangfireServer();
}

カスタム認証フィルターを使用しようとしています:

public class AuthorizationFilter : IAuthorizationFilter
{
    public bool Authorize(IDictionary<string, object> owinEnvironment)
    {
        var context = new OwinContext(owinEnvironment);

        return context.Authentication.User.Identity.IsAuthenticated;
    }
}

認証に使用context.Authentication.Userしたいと思っていましたが、常に null を返します。

自己ホスト型 hangfire サービスでこれを機能させる方法はありますか?

4

0 に答える 0