我需要为正在构建的 Web 应用程序执行一些后台任务。我喜欢使用Topshelf在服务器上运行服务的外观。我想知道初始化服务的最佳方式。我想知道从 MVC 应用程序启动时启动服务是否是个坏主意
例如:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
InitService();
}
private void InitService()
{
Task.Factory.StartNew(() => HostFactory.Run(x =>
{
x.Service<TestService>(s =>
{
s.SetServiceName("TestService");
s.ConstructUsing(
name => new TestService());
s.WhenStarted(ts => ts.Start()); s.WhenStopped(ts => ts.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Sample test service");
x.SetDisplayName("Test display name");
x.SetServiceName("Test service name");
}));
}
显然,启动应用程序的工作是在它自己的任务中运行的。有没有更好的方法来做到这一点?你能看出这有什么问题吗?
我的想法是,一旦服务启动,它将从那时起自行处理。
我唯一的想法是:如果您多次重新启动 Web 应用程序,但我想我可以输入一些逻辑来检查服务是否已经在运行,然后不要启动另一个。