在安装Onstart()方法并从服务菜单中运行它之后,我有一个windows服务在执行Onstart()方法时遇到了问题,我正在记录在执行的每一步发生的所有事情,以查看问题所在。但是没有错误,它在主方法中记录并运行良好,直到服务实际被调用来运行,然后它就什么也不做了。
值得注意的是,它在调试中没有任何问题。
调用服务的我的程序类(起点):
public class Program
{
private static Container _container;
private static ILogger<Program> _logger;
/// <summary>
/// The main entry point for the application.
/// </summary>
private static void Main()
{
_container = SimpleInjectorContainer.Build(registerConfig: true, useThreadScopedLifestyle: true);
SimpleInjectorContainer.LoggAndVerify(_container);
using (ThreadScopedLifestyle.BeginScope(_container))
{
try
{
_logger = _container.GetInstance<ILogger<Program>>();
_logger.LogInformation("Test - Works");
VerifyConfiguration();
}
catch (Exception ex)
{
var logger = _container.GetInstance<ILogger<Program>>();
logger.LogError(ex, "Configuration is not valid");
throw;
}
if (Environment.UserInteractive)
{
RunDebug();
}
else
{
System.Diagnostics.Debugger.Launch();
_logger.LogInformation("It's Here 49");
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
_container.GetInstance<SenderService>()
};
_logger.LogInformation("It's Here 56");
//up until here its fine, but it doesn't run the next line
ServiceBase.Run(ServicesToRun);
_logger.LogInformation("It's Here 58");
}
}
}
private static void RunDebug()
{
var senderService = _container.GetInstance<SenderService>();
senderService.TestStart();
Console.WriteLine("Sender Started Debug");
Console.ReadLine();
senderService.TestStop();
}
private static void VerifyConfiguration()
{
var configValidator = _container.GetInstance<IConfigurationValidator>();
configValidator.VerifyOperatorPrefixNumbers();
configValidator.VerifyConfiguration();
configValidator.VerifyOperators();
}
}我的实际服务:
public partial class SenderService : ServiceBase
{
private readonly Container container;
private readonly ILogger<SenderService> logger;
private readonly ISmsHandlerConfig config;
private readonly IConfigurationValidator configValidator;
public SenderService(
Container container,
ILogger<SenderService> logger,
ISmsHandlerConfig config,
IConfigurationValidator configValidator)
{
this.InitializeComponent();
this.container = container;
this.logger = logger;
this.config = config;
this.configValidator = configValidator;
}
public void TestStart()
{
Console.WriteLine($"Starting {ServiceName} service");
this.OnStart();
}
public void TestStop()
{
Console.WriteLine($"Stopping {ServiceName} service");
this.OnStop();
}
protected void OnStart()
{
try
{
this.logger.LogInformation($"{this.ServiceName} starting");
SmsHandlerAction();
}
catch (Exception ex)
{
this.logger.LogError(ex, $"Error starting service {this.ServiceName}");
throw;
}
}
protected override void OnStop()
{
try
{
this.Dispose();
this.logger.LogInformation($"{this.ServiceName} stopped");
}
catch (Exception ex)
{
this.logger.LogError(ex, $"Error stopping service {this.ServiceName}");
}
}
private void SmsHandlerAction()
{
while (true)
{
this.logger.LogInformation($"{this.ServiceName} started");
using (ThreadScopedLifestyle.BeginScope(this.container))
{
var smsSenderService = this.container.GetInstance<ISmsSenderService>();
var sendResult = smsSenderService.SendSms(this.container);
// Wait if there are not messages for sending
if (!sendResult && this.config.IdleTimeMiliseconds != 0)
{
Thread.Sleep(this.config.IdleTimeMiliseconds);
}
}
}
}
}这是记录的内容:
2019-02-12 18:02:18.7972信息测试-工程 2019-02-12 18:02:20.6370信息在这里49 2019-02-12 18:02:20.6410信息在这里56
在我停止服务之后:
2019-02-12 18:02:35.7375 INFO SenderService已停止 2019-02-12 18:02:35.7375信息在这里58
它缺少了this.logger.LogInformation($"{this.ServiceName} starting");部分。
它不记录onstart方法中的行,因为它从未实际执行,因此我检查了服务是否正在运行,只是日志记录失败,情况并非如此。
我的IDE是VS 2017,OS是Win 7,DI库是SimpleInjector 4.0.12。
我知道stackoverfllow(this)上有一个类似的问题,但我看不出它是如何解决我的问题的。
另外,我的事件查看器也不记录任何问题,只记录有关它成功启动的信息。
我很迷茫,所以任何指导都会有帮助的。
发布于 2019-02-13 09:21:49
我发现了这个问题,因为我删除了OnStart()上的覆盖。
https://stackoverflow.com/questions/54658236
复制相似问题