我有一个c#windows服务,在运行几个小时后几乎每天都没有记录崩溃。最近我在每个方法中添加了catch块,但它仍然无济于事。由于我在MSMQ上使用异步回调,我想可能存在一些多线程问题,但我没有明确的线索。任何洞察这个问题都会非常有帮助。这是伪代码:
public MyService : ServiceBase
{
onStart()
{
try
{
someQueue.BeginReceive()
}
catch(Exception e)
{
log error and throw
}
}
void someQueue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
try
{
//process the message
}
catch(Exception e)
{
//log
}
finally
{
someQueue.Refresh()
someQueue.BeginReceive();
}
}
}
答案 0 :(得分:0)
您可以查看事件查看器以了解服务停止的原因。
打开开始菜单并启动事件查看器,在应用程序部分中,您将找到错误
答案 1 :(得分:0)
我知道自这项要求以来已经过去了数年。但是我遇到了同样的问题,除了以下几点之外,没有解决方案对我有用。 就我而言,事件查看器没有提供有关崩溃的任何详细信息,并且所有用户权限都可以。 问题是OnStart方法中的一行代码:
Debugger.Launch();
它正在尝试启动调试器,但该服务器上未安装该调试器。因此,它从未完成,我的代码也没有捕获任何异常。 摆脱了它,它开始起作用。