Après une semaine de recherche et d'essayer de gérer les modifications de session, je n'ai toujours pas réussi à obtenir les résultats que je recherchais. J'ai examiné tous les exemples disponibles et examiné en profondeur le code source TopShelf. Ma classe principale est la suivante:Comment gérer les modifications de session de service avec TopShelf
class Program
{
static void Main(string[] args)
{
//Always start out in our apps base directory
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
const string serviceName = "Service";
const string displayName = "Service";
const string description = "Provide assistance";
try
{
HostFactory.Run(x =>
{
x.UseCommonLogging();
x.UseNinject(new IocModule());
x.Service<ServService.Service.WinService>(sc =>
{
sc.WhenStarted((s, hostControl) => s.Start(hostControl));
sc.WhenStopped((s, hostControl) => s.Stop(hostControl));
sc.WhenSessionChanged((se, e, id) =>
{
se.SessionChange(e, id);
});
//sc.WhenSessionChanged((s, chg) => s.SessionChange(chg));
sc.ConstructUsingNinject();
});
x.EnableSessionChanged();
x.RunAsLocalSystem();
x.EnableServiceRecovery(r =>
{
r.RestartService(0);
});
x.StartAutomatically();
x.SetDescription(description);
x.SetDisplayName(displayName);
x.SetServiceName(serviceName);
Et voici ma classe de service:
{
class WinService : ServiceControl
{
private CancellationTokenSource cancelSource;
private CancellationToken ct;
public ILog Log { get; private set; }
public WinService(ILog logger)
{
if (logger == null)
throw new ArgumentNullException(nameof(logger));
}
public void SessionChange(SessionChangedArguments chg)
{
Log.Info("Service session changed!!!!!!!!!!!");
}
//Starts service
public bool Start(HostControl hostControl)
{
Console.Writeline("STARTED!);
return true;
}
//Stops service
public bool Stop(HostControl hostControl)
{
cancelSource.Cancel();
return true;
}
}
Chaque fois que je lance le code et indépendamment de tout changement que je fais les valeurs par défaut de l'API de code source Topshelf WindowsServiceHost.cs
classe sont imprimés au lieu qui est
"[Topshelf] session de service a changé"
mais selon mon code il devrait imprimer "Service session changed !!!!!!!!!!!" isntead. Voici le Top Shelf Source Code auquel je fais allusion et la pièce correspondante commence à la ligne 217. Toute aide grandement appréciée comme toujours.