我正在尝试在控制台app .net core 2.2中使用Topshelf把hangfire作为windows服务来使用。我只想加载hangfire仪表板,不添加任何工作或其他内容。
Program.cs
using System;
using Topshelf;
namespace HangfireAsService
{
class Program
{
static void Main(string[] args)
{
HostFactory.Run(config =>
{
config.Service<Bootstrap>(service =>
{
service.ConstructUsing(s => new Bootstrap());
service.WhenStarted(s => s.Start());
service.WhenStopped(s => s.Stop());
});
config.RunAsLocalSystem();
config.SetDescription("Hangfire as windows Service for DataCrawling Project");
config.SetDisplayName("Hangfire Service Custom");
});
}
}
}
Bootstrap.cs
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Owin.Hosting;
namespace HangfireAsService
{
public class Bootstrap
{
private IDisposable _host;
public void Start()
{
var options = new StartOptions { Port = 8999 };
_host = WebApp.Start<Startup>(options);
Console.WriteLine();
Console.WriteLine("Hangfire has started");
Console.WriteLine("Dashboard is available at http://localhost:8999/hangfire");
Console.WriteLine();
}
public void Stop()
{
_host.Dispose();
}
}
}
Startup.cs
using Hangfire;
using Microsoft.AspNetCore.Builder;
using Owin;
using System;
using System.Collections.Generic;
using System.Text;
namespace HangfireAsService
{
public class Startup
{
public void Configuration(IApplicationBuilder appBuilder)
{
GlobalConfiguration.Configuration
.UseSqlServerStorage("Server=111.111.11.1\\INS2017; Database=Hangfire; user=sa;
password=;");
appBuilder.UseHangfireDashboard();
appBuilder.UseHangfireServer();
}
}
}
正如您所见,我为我的“自托管OWIN”创建了2个类,并在查看“事件查看器”后得到了以下显示的错误:
无法找到源HangfireAsService的Event ID 0的说明。此事件引发组件未安装在本地计算机上或安装已损坏。您可以在本地计算机上安装或修复组件。
如果事件源来自另一台计算机,则必须使用事件保存显示信息。
以下信息包括在事件中:
服务无法启动。System.NullReferenceException:对象引用未将对象实例化。 在Microsoft.Owin.Hosting.Utilities.SettingsLoader.FromConfigImplementation..ctor()中 at Microsoft.Owin.Hosting.Utilities.SettingsLoader.<>c.b__1_0()中 at System.Threading.LazyInitializer.EnsureInitializedCore [T](T& target,Func<code>1 valueFactory)atMicrosoft.Owin.Hosting.Utilities.SettingsLoader.LoadFromConfig(IDictionary2 settings) in Microsoft.Owin.Hosting.Engine.StartContext..ctor(StartOptions options) 中 atMicrosoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions options) in Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options) 中 at HangfireAsService.Bootstrap.Start() in C:\MyWorkSpace\Data Crawling\dataCrawlingConsole\HangfireAsService\Bootstrap.cs:line 17
在HangfireAsService.Program.<>c.b__0_3(Bootstrap s) 在C:\MyWorkSpace\Data Crawling\dataCrawlingConsole\HangfireAsService\Program.cs:line 15中在Topshelf.ServiceConfiguratorExtensions.<>c__DisplayClass2_01.<WhenStarted>b__0(T service, HostControl control) 中 at Topshelf.Builders.DelegateServiceBuilder
1.DelegateServiceHandle.Start(HostControl hostControl) 中 at Topshelf.Runtime.Windows.WindowsServiceHost.OnStart(String[] args) 在System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)
消息资源存在,但在消息表中找不到该消息。