我在Windows 2008上有MSMQ。消息在私有队列中可用。我有一个WCF订阅者(用C#编写),它作为Windows服务安装。现在问题是有时WCF订户停止从队列中选择消息。如果我再次重新启动服务它工作正常。现在我附加IError
处理程序来记录原因和异常。
现在处理这个问题我想要做的是,我将恢复属性设置为在第一次失败时重新启动服务,现在问题是如何从HandleError()
IErrorHandler class
方法抛出错误?
请告诉我在窗口服务中抛出异常的最佳方法,以便重新启动它。
答案 0 :(得分:1)
虽然解决异常的根本原因可能更好,但在某些情况下实施https://github.com/AutoMapper/AutoMapper/issues/925方法肯定是有效的。实际上,这种能够杀死已经成为“有缺陷”的流程的能力。以某种方式对fail fast的概念至关重要。
所以,要让windows服务自杀:
void KillSelf()
{
try
{
// Code to close open connections/dispose
// of unmanaged resources etc
...
}
finally
{
Environment.Exit(1);
}
}
应将服务恢复选项设置为自动重启。这将确保您的服务再次直接恢复。
答案 1 :(得分:0)
据我所知,不能抛出异常来重启Windows服务。
我通常封装了一个try catch(带有日志记录),以防止任何异常崩溃服务,这与你的建议相反。
可能是您可以捕获错误并停止服务(不确定)并将服务配置为在停止时重新启动?