超时异常离开Windows服务反应迟钝
问题描述:
我有一个Windows服务,做以下的事情:超时异常离开Windows服务反应迟钝
- 连接到数据源的OnStart。
- 调用一种方法,每5秒从数据源获取数据并将其保存到数据库。
- 调用第三方Web服务以每5秒处理一次数据。
的设置:
两个点2和3被称为在同一定时器的经过。有时,第三方Web服务会超时。在这种情况下,我们捕获异常,将其记录在我们的数据库中,然后不要再抛出它。我们的想法是,当定时器再次过期时,我们想重新调用Web服务,因为改进第三方服务不在我们的控制范围内,并且在任何情况下都不会经常发生。下面是过程数据()的一些伪代码:
private bool ProcessData()
{
bool hasBeenProcessed = false;
try
{
// Call web service
// If successful
hasBeenProcessed = true;
}
catch(Exception ex)
{
// Log exception
}
return hasBeenProcessed;
}
问题:
我们的windows服务完全停止工作,即使异常被处理,而不是重新抛出。忘记第3步,我们无法看到数据库中的任何数据应该作为第2步的一部分来完成。理想情况下,我们不希望数据收集因为数据处理中的问题而受到影响。该服务本身在服务管理器中显示为正在运行。尽管从服务管理器停止服务不起作用。
问:
虽然我们现在分开这两件事情分成两个不同的服务,我试图找出什么地方出了错在目前的逻辑是什么?为什么Windows服务变得无法响应?
答
一种可能性是查询数据和调用带有数据的Web服务花费的时间超过5秒,因此您的计时器事件开始彼此堆叠在一起。
在尝试再次处理数据之前,请考虑使用变量来跟踪是否正在处理数据。例如:
private bool _processingData = false;
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (!_processingData)
{
_processingData = true;
QueryForData();
ProcessData();
_processingData = false;
}
}
其中是正在处理的异常可以广告或显示您正在执行的日志逻辑..?基于你已经显示你的方法调用的代码什么也不做 – MethodMan 2014-09-22 21:19:32