我尝试将一个在本地运行良好的服务部署到生产服务器。但是在这台服务器上,ElapsedEventHandler似乎永远不会调用我的方法Tick()
我读过其他类似的主题 First Windows Service - timer seems not to tick 要么 Timer tick event is not called in windows service 但我无法解决我的问题:/
我还尝试使用_timer.Enabled = 1而不是_timer.Start(没有正常情况但仍然尝试过)并尝试重新安装服务几次。
我使用Class System.Timers中的Timer。 这是我的代码:
static void Main()
{
var servicesToRun = new ServiceBase[]
{
new SynchronizeEvents()
};
#if DEBUG
servicesToRun.LoadServices();
#else
ServiceBase.Run(servicesToRun);
#endif
}
和
public partial class SynchronizeEvents : ServiceBase
{
private readonly Logger _logger = LogManager.GetCurrentClassLogger();//Nlog
private Timer _timer;//From Class System.Timers
private readonly DbSetName _db = new DbSetName ();
private static readonly Dictionary<Employee, otherStuff> Subscriptions = new Dictionary<Employee, otherStuff>();
public SynchronizeEvents()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_logger.Trace("Service Start");
_timer = new Timer(5000) { AutoReset = false };//Same problem without AutoReset = false
_timer.Elapsed += Tick;
_timer.Start();
_logger.Trace("End OnStart");
}
protected override void OnShutdown()
{
_logger.Trace("OnShutdown");
_timer.Stop();
base.OnShutdown();
}
protected void Tick(object sender, ElapsedEventArgs elapsedEventArgs)
{
_logger.Trace("Tick");
_timer.Stop();
Compute();
_timer.Start();
}
protected override void OnStop()
{
_logger.Trace("OnStop");
}
在DebugMode上以及在发布模式下的本地计算机上,一切都很好,但是当我在生产服务器上安装它时,我得到的唯一日志是:
2014-09-08 16:35:57.1929 TRACE服务开始
2014-09-08 16:35:57.2085 TRACE End OnStart
当我停止服务时,我也得到了这个......
2014-09-08 16:40:52.4072 TRACE End OnStop
答案 0 :(得分:0)
实际上我向Steve Wellens道歉,他对Compute做什么感到正确。 问题与Compute()有关。 它有一些代码需要一个丢失的DLL。 我不知道为什么_logger.Trace(“Tick”);未被调用且没有触发异常:/ 我不得不每行评论我的程序行,以找出问题的来源......