尝试在域/ 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;
}
}
乔布斯成功运行,但我已经没有让仪表板工作的想法。
答案 0 :(得分:10)
我有类似的东西,但我设法通过阅读post来解决问题。
如果你还没有,希望你能有更好的运气。我的主要问题是缺少DLL,然后从TemporaryASP.NET文件夹中删除站点数据。
编辑:有人下来投了这个答案,因为我使用了解决方案的链接。
由于我确实找到了解决这个问题的方法,我想我会再试一次。 :)
以下是我采取解决方案的步骤。
答案 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 安装