我在使用C#创建的Windows服务中尝试确定超时的原因时遇到了困难.我花了相当多的时间查看有关该问题的几个帖子和主题,但我不确定还有什么可以尝试.
有什么问题?
有时在某些运行我的Windows服务的计算机上,它在重新启动计算机后无法成功启动.我收到有关服务无法及时启动的常见EventLog消息,并且在30000毫秒后超时.Windows Server 2003计算机似乎是最常见的模式,但并不总是与此操作系统隔离.例如,它在其他W2K3机器上运行得非常好.
启动失败可能是相当随机的,因为它有时会启动,有时会失败,因此很难按需重现问题.我也使用Log4Net捕获和错误并将它们记录到RollingFileAppender.但是,当服务无法启动时,不会创建任何日志文件,也不会保存日志信息.就好像我的服务条目线程阻塞而没有被调用.
其他详情:
我在Program.cs中添加了以下代码,其中包括服务的主要入口点.我在CurrentDomain上挂钩到一个UnhandledException事件,并使用log4net记录任何未处理的错误.如果ServiceBase.Run以某种方式炸弹,我还可以记录该错误.
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new SchedulerService()
};
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
try
{
ServiceBase.Run(ServicesToRun);
}
catch (Exception ex)
{
Log.Fatal("Unhandled Service Exception", ex);
}
}
private static log4net.ILog _log = null;
static log4net.ILog Log
{
get
{
if (_log == null)
{
if (!log4net.LogManager.GetRepository().Configured)
{
log4net.Config.XmlConfigurator.Configure();
}
_log = log4net.LogManager.GetLogger(typeof(Program));
}
return _log;
}
}
static void CurrentDomain_UnhandledException(object …Run Code Online (Sandbox Code Playgroud)