我正在尝试使用 .Net 中的 TopShelf 和 FluentScheduler 在 Windows 服务中每 10 秒触发一次事件,但我不只是每 10 秒触发一次事件。我正在分享我的实现,请指导我。
class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<IWindowsService>(s =>
{
s.ConstructUsing(name => new WindowsService(new SchedulerRegistry(new Worker())));
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Test");
x.SetDisplayName("Test Service");
x.SetServiceName("Testservice");
x.StartAutomatically();
x.EnableServiceRecovery(s =>
{
s.RestartService(1);
s.RestartService(2);
});
});
}
}
public class SchedulerRegistry : Registry
{
public SchedulerRegistry(Worker worker)
{
Schedule(() =>
{
try
{
worker.Run();
}
catch (Exception ex)
{
throw;
}
}).NonReentrant().ToRunNow().AndEvery(10).Seconds();
}
}
public interface IWindowsService
{
void Start();
void Stop();
}
public class WindowsService : IWindowsService
{
public WindowsService(SchedulerRegistry registry)
{
JobManager.Initialize(registry);
}
public void Start()
{
Console.WriteLine("Service started");
}
public void Stop()
{
Console.WriteLine("Service stopped");
}
}
public class Worker
{
public void Run()
{
CheckUrl();
}
public static void CheckUrl()
{
HttpWebResponse response = null;
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://google.com");
request.Method = "GET";
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
}
else
{
}
}
catch (WebException e)
{
response.Close();
}
finally
{
if (response != null)
{
response.Close();
}
}
}
}