我使用TopShelf构建Windows服务和TopShelf.Quartz包。 是否可以从IJob的Execute方法关闭整个服务?现在我所能做的就是删除工作。例如,如果我在工作中捕获特定的异常,我想制作日志和关机服务。
感谢您的回答。
public class Program
{
public static void Main()
{
HostFactory.Run(c =>
{
// Topshelf.Ninject (Optional) - Initiates Ninject and consumes Modules
c.UseNinject(new SampleModule());
c.Service<SampleService>(s =>
{
//Topshelf.Ninject (Optional) - Construct service using Ninject
s.ConstructUsingNinject();
s.WhenStarted((service, control) => service.Start());
s.WhenStopped((service, control) => service.Stop());
// Topshelf.Quartz.Ninject (Optional) - Construct IJob instance with Ninject
s.UseQuartzNinject();
// Schedule a job to run in the background every 5 seconds.
// The full Quartz Builder framework is available here.
s.ScheduleQuartzJob(q =>
q.WithJob(() =>
JobBuilder.Create<SampleJob>().Build())
.AddTrigger(() =>
TriggerBuilder.Create()
.WithSimpleSchedule(builder => builder
.WithIntervalInSeconds(5)
.RepeatForever())
.Build())
);
});
});
}
}
public class SampleJob : IJob
{
public void Execute(IJobExecutionContext context)
{
//Here I want catch exception and shoutdown service
}
}
答案 0 :(得分:1)
您命名为context
,您可以获取调度程序并将其关闭
public class SampleJob : IJob
{
public void Execute(IJobExecutionContext context)
{
context.Scheduler.Shutdown();
}
}
在documentation页面上有停止整个服务的示例(如果我没有记错的话):
c.Service<SampleService>(s =>
{
//Specifies that Topshelf should delegate to Ninject for construction
s.ConstructUsingNinject();
s.WhenStarted((service, control) => service.Start());
s.WhenStopped((service, control) => service.Stop());
});