Приборная панель Hangfire возвращает 404

При попытке получить доступ к панели управления Hangfire в моем локальном IIS по адресу domain/hangfire/ я получаю ответ 404. Это проект веб-форм, ориентированный на .Net 4.5.1, Hangfire — версия 1.5.3. Мои классы запуска и авторизации выглядят следующим образом:

[assembly: OwinStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            GlobalConfiguration.Configuration.UseSqlServerStorage("MyConnString");

            DashboardOptions opts = new DashboardOptions
            {
                AuthorizationFilters = new[] { new AuthorisationOverride() }
            };

            app.UseHangfireServer();
            app.UseHangfireDashboard("/hangfire", opts);
        }
    }
}

public class AuthorisationOverride : Hangfire.Dashboard.IAuthorizationFilter
{
    public bool Authorize(IDictionary<string, object> owinEnvironment)
    {
        return true;
    }
}

Задания выполняются успешно, но у меня закончились идеи, как заставить Dashboard работать.


person Jason    schedule 29.12.2015    source источник
comment
Какую версию Hangfire вы используете?   -  person tom redfern    schedule 29.12.2015
comment
1.5.3, соответственно обновили вопрос.   -  person Jason    schedule 29.12.2015
comment
Вам удалось это решить? У меня такая же проблема после развертывания на другом сервере.   -  person Lee Gunn    schedule 02.03.2016
comment
Мы этого не сделали. мы пока работаем без панели мониторинга, и у нас есть элемент невыполненной работы для изучения и, возможно, добавления параллельного процесса, который просто запускает панель мониторинга, подключенную к той же базе данных.   -  person Jason    schedule 02.03.2016


Ответы (6)


У меня было что-то похожее, но мне удалось решить эту проблему, прочитав этот опубликовать.

Надеюсь, вам повезет больше, если вы еще этого не сделали. Основной проблемой для меня была отсутствующая DLL, а затем удаление данных сайта из папки TemporaryASP.NET.

Изменить: кто-то проголосовал за этот ответ, потому что я использовал ссылку для решения.

Поскольку я нашел решение этой конкретной проблемы, я решил еще раз попытаться поделиться им. :)

Вот шаги, которые я предпринял, чтобы найти решение.

  1. Убедитесь, что у вас есть Microsoft.Owin.Host.SystemWeb.dll в каталоге bin этого проекта. (В моем случае dll отсутствовала)
  2. Остановите свой пул приложений
  3. Перейдите в папку TemporaryASP.NET: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files и удалите папку внутри папки вашего сайта/приложения.
  4. Перезапустите пул приложений
  5. Перейдите к «/ admin» или к тому, что вы установили для URL-адреса панели инструментов «/ Hangfire» по умолчанию.
person Ray T    schedule 08.03.2016
comment
Ценю вашу настойчивость =) - person Joseph Evensen; 20.06.2020

Сегодня боролся с этим несколько часов и просто исправил это в своем проекте.

Попробуйте переместить код конфигурации Hangfire выше в методе Configuration класса Startup.

У меня был код конфигурации Hangfire в самом низу Startup.Configuration, и я случайно обнаружил, что панель инструментов снова работает, когда я перемещаю ее перед некоторыми другими элементами OWIN, которые я настраивал.

В частности, я переместил его над следующим кодом в моем проекте:

app.UseCors(CorsOptions.AllowAll);

app.MapSignalR();

AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);

// my AutoMapper configuration

// some async/await code that was calling .Wait() here. 

У меня не было времени, чтобы выяснить, какая именно строка кода нарушает работу панели управления Hangfire, но я надеюсь, что это кому-то поможет.

Также для справки: старый код работал под IIS Express по адресу https://localhost:44342/hangfire. Я получал 404 в полном IIS по адресу https://localhost/appname/hangfire.

person Alex Dresko    schedule 21.02.2017

Добавьте эту строку в файл web.config:

<system.webServer>
    <handlers>
    <add name="hangfireDashboard" path="hangfire" type="System.Web.DefaultHttpHandler" verb="*" />
    </handlers>
</system.webServer>
person marco.broccio    schedule 11.04.2017
comment
Это вызывает эту ошибку для меня: The DefaultHttpHandler.BeginProcessRequest method is not supported by IIS integrated pipeline mode. - person RAM; 02.10.2017
comment
Это исправило это для меня! - person EvalKeneval; 12.01.2018
comment
Теперь он сломан, с тем же сообщением, что и одно ОЗУ. Вам удалось исправить это ОЗУ? Если вы можете пролить свет, я был бы очень рад! - person EvalKeneval; 12.06.2019

Поскольку решения пока нет, я хотел бы поделиться тем, что я исправил, чтобы решить эту проблему.

Если вы столкнулись с этой проблемой только в рабочей среде, ваш файл web.config настроен неправильно.

Во-первых, если вы уже создали класс Startup, добавьте в файл web.config следующее:

<add key="owin:AutomaticAppStartup" value="true" />

Затем убедитесь, что вы сослались на сборки OWIN, как показано ниже:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>

Хотя, когда вы устанавливаете OWIN через nuget, программа установки автоматически обновит для вас web.config, но на всякий случай вы всегда можете добавить это. Кроме того, убедитесь, что указанная выше версия OWIN совпадает с той, которую вы установили через nuget.

Надеюсь, это кому-нибудь поможет!

Изменить: отвечая на исходный вопрос OP, Hangfire возвращает ошибку 404, когда он не запущен. Помимо добавления класса Startup OWIN, нам также необходимо указать autostartup=true в веб-конфигурации. Следующая проблема, которую IIS будет искать, — это ссылка на Hangfire, где мы добавляем детали сборки.

person naps73r    schedule 25.09.2017

запуск приложения

 [assembly: OwinStartupAttribute(typeof(yournamespace.Startup))]
    namespace yournamespace    
    public partial class Startup
            {
                public void Configuration(IAppBuilder app)
                {

                    var storage = new SqlServerStorage("connectionstring");

                    ......
                    ......
                    app.UseHangfireDashboard("/Scheduler", new DashboardOptions() { AuthorizationFilters = new[] { new HangFireAuthorizationFilter() } }, storage);
                }

Фильтр авторизации

public class HangFireAuthorizationFilter:IAuthorizationFilter
    {
        public bool Authorize(IDictionary<string, object> owinEnvironment)
        {
            // In case you need an OWIN context, use the next line.
            // `OwinContext` class is defined in the `Microsoft.Owin` package.
            var context = new OwinContext(owinEnvironment);

            return context.Authentication.User.Identity.IsAuthenticated &&
                   context.Authentication.User.IsInRole("xyz");

        }

    }

Вы можете игнорировать HangFireAuthorizationFilter, если хотите.

person Sudipto Sarkar    schedule 30.03.2016

Проблема для меня заключалась в отсутствии установки ASP.NET на сервере.

person Mindaugas Varkalys    schedule 23.01.2021