Как получить доступ к панели управления Hangfire при настройке заданий через консольное приложение - PullRequest
1 голос
/ 08 июля 2020

Я создал приложение. NET Framework 4.5, используя пакеты Hangfire.Core и Hangfire.SqlServe r nuget. Код довольно прост.

class Program
    {
        static void Main(string[] args)
        {
            GlobalConfiguration.Configuration
                .UseSqlServerStorage("Server=localhost;Database=HangfireDb;User Id=username;Password=password");
            BackgroundJob.Enqueue(() => ProcessData("process this"));
            using (var server = new BackgroundJobServer())
            {
                Console.WriteLine("Hangfire Server started. Press any key to exit...");
                Console.ReadKey();
            }
        }

        public static void ProcessData(string data)
        {
            Console.WriteLine(data);
        }
    }

После запуска этой программы я вижу, что схема таблицы создается в базе данных, а таблица [Job] заполняется записью для этого метода. Однако я не знаю, как получить доступ к панели инструментов Hangfire для просмотра самой работы. Я пробовал http://localhost/hangfire, но он сообщает об ошибке 404. После некоторого поиска в Google я добавил в проект следующий класс Startup.cs.

using Hangfire;
using Microsoft.Owin;
using Owin;
using System.Collections.Generic;

[assembly: OwinStartup(typeof(HangfireSample.Startup))]

namespace HangfireSample
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseHangfireServer();
            app.UseHangfireDashboard("/hangfire");
        }
    }
}

Я установил точку останова в методе Configuration, но он не сработал, и я все еще не могу получить доступ к панель приборов Hangfire. Есть предложения, что я здесь делаю не так?

1 Ответ

0 голосов
/ 12 июля 2020

Вы создали два разных класса: один для HangfireSample (необходим для панели управления) и один для Main (Консоль). Проблема, которую я вижу, заключается в том, что у вас нигде в вашем классе Main нет вызова HangfireSample.

Я создал образец HangfireProject (. Net Framework с Hangfire 1.7.11 / MS SQL) и успешно настроил и запустил приборную панель с использованием WebApp.Start<Dashboard>(options). Эта строка фактически запускает вашу панель управления Hangfire.

Dashboard.cs

using Hangfire;
using HangfireProject;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(Dashboard))]
namespace HangfireProject
{
    public class Dashboard
    {
        public void Configuration(IAppBuilder app)
        {
            //app.UseHangfireServer();
            app.UseHangfireDashboard();
        }
    }
}

Main Class

using Hangfire;
using Hangfire.SqlServer;
using Microsoft.Owin.Hosting;
using System;
using System.Collections.Generic;

namespace HangfireProject
{
    class Program
    {
        static void Main(string[] args)
        {
            GlobalConfiguration.Configuration
                .UseSqlServerStorage("Server=localhost;Database=HangfireDB;User Id=localAccount;Password=password;", new SqlServerStorageOptions
                {
                    CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
                    SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
                    QueuePollInterval = TimeSpan.Zero,
                    UseRecommendedIsolationLevel = true,
                    DisableGlobalLocks = true
                });

            StartOptions options = new StartOptions();
            options.Urls.Add($"http://localhost:9095");
            options.Urls.Add($"http://127.0.0.1:9095");
            WebApp.Start<Dashboard>(options);

            using (var server = new BackgroundJobServer())
            {
                System.Console.WriteLine("Hangfire Server started. Press any key to exit...");
                System.Console.ReadKey();
            }
        }
    }
}

Чтобы иметь возможность запускать WebApp.Start<>, вам также необходимо установить пакет Microsoft.Owin.Host.HttpListener Nuget. Убедитесь, что вы запускаете этот проект с правами администратора, так как ему требуется доступ для создания URL-адресов

...