我将开发一个应用程序,它将处理在线数据(通过套接字传递),它不需要任何用户交互.
我在考虑一个简单的控制台应用程序,但是Windows服务呢?它提供了额外的好处吗?(我知道Windows服务不需要用户登录来运行服务,但我要求额外的好处)
我有一个用c#编写的Windows服务.它内部有一个计时器,可以定期激活一些功能.所以我服务的骨架:
public partial class ArchiveService : ServiceBase
{
Timer tickTack;
int interval = 10;
...
protected override void OnStart(string[] args)
{
tickTack = new Timer(1000 * interval);
tickTack.Elapsed += new ElapsedEventHandler(tickTack_Elapsed);
tickTack.Start();
}
protected override void OnStop()
{
tickTack.Stop();
}
private void tickTack_Elapsed(object sender, ElapsedEventArgs e)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
它工作了一段时间(如10-15天)然后停止.我的意思是服务显示为正在运行,但它没有做任何事情.我做了一些日志记录,问题可能是计时器,因为在间隔之后它不会调用tickTack_Elapsed函数.
我正在考虑在没有计时器的情况下使用无限循环重写它,这会在我设置的时间内停止处理.这也不是一个优雅的解决方案,我认为它可能会对内存产生一些副作用.
Timer是从System.Timers命名空间使用的,环境是Windows 2003.我在不同服务器上的两个不同服务中使用这种方法,但两者都产生了这种行为(这就是为什么我认为它以某种方式连接到我的代码或框架本身).
有人经历过这种行为吗?有什么不对?
我编辑了这两项服务.一个人到处都有一个不错的尝试和更多的记录.第二个定期进行定时娱乐.他们都没有停止过,所以如果这种情况再持续一周,我会关闭这个问题.到目前为止,感谢大家.
我关闭了这个问题因为什么都没发生 我的意思是我做了一些更改,但这些更改在这个问题上并不真正相关,而且从那时起这两个服务都没有任何问题.请将其标记为"已关闭且不再相关".