Hangfire仪表板返回404

时间:2015-12-29 11:50:07

标签: c# asp.net hangfire

尝试在域/ hangfire /上访问本地IIS上的hangfire控制台时,我收到了404响应。这是针对.Net 4.5.1的webforms项目,Hangfire是1.5.3版。我的startup和authorisationoverride类如下:

[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;
    }
}

乔布斯成功运行,但我已经没有让仪表板工作的想法。

6 个答案:

答案 0 :(得分:10)

我有类似的东西,但我设法通过阅读post来解决问题。

如果你还没有,希望你能有更好的运气。我的主要问题是缺少DLL,然后从TemporaryASP.NET文件夹中删除站点数据。

编辑:有人下来投了这个答案,因为我使用了解决方案的链接。

由于我确实找到了解决这个问题的方法,我想我会再试一次。 :)

以下是我采取解决方案的步骤。

  1. 确认您在此项目的bin目录中有Microsoft.Owin.Host.SystemWeb.dll。 (在我的情况下,dll丢失了)
  2. 停止您的应用程序池
  3. 导航到TemporaryASP.NET文件夹:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files并删除站点/应用程序文件夹中的文件夹。
  4. 重启你的app pool
  5. 默认情况下,导航至“/ admin”或您将信息中心网址设置为“/ hangfire”的任何内容。

答案 1 :(得分:5)

今天挣扎了几个小时,然后把它修好了。

尝试在Startup课程Configuration方法中将Hangfire配置代码移到更高的位置。

我在Startup.Configuration的最底部安装了我的Hangfire配置代码,当我在配置其他一些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控制台,但我希望能帮助某人。

此外,对于记录,旧代码在https://localhost:44342/hangfire的IIS Express下工作。我在https://localhost/appname/hangfire处获得了完整IIS中的404。

答案 2 :(得分:3)

在web.config文件中添加以下行:

<system.webServer>
    <handlers>
    <add name="hangfireDashboard" path="hangfire" type="System.Web.DefaultHttpHandler" verb="*" />
    </handlers>
</system.webServer>

答案 3 :(得分:1)

应用程序启动

 [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。

答案 4 :(得分:1)

由于到目前为止还没有解决方案,我想分享一些我纠正的问题,以解决这个问题。

如果您仅在生产中遇到此问题,则表示您的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>

虽然,当您通过nuget安装OWIN时,安装程​​序会自动为您更新web.config,但万一它没有,您可以随时添加它。进一步确保上面的OWIN版本与通过nuget安装的那个匹配。

希望这有助于某人!

编辑:回答OP的原始问题,Hangfire在未启动时返回404错误。除了添加Startup OWIN类之外,我们还需要在Web配置中提及automaticstartup = true。 IIS将要查找的下一个问题是对Hangfire的引用,我们将在哪里提供程序集详细信息。

答案 5 :(得分:0)

我的问题是缺少服务器上的 ASP.NET 安装