如何使窗口服务重新启动时出错

时间:2013-05-21 17:50:31

标签: c# .net wcf windows-services msmq

我在Windows 2008上有MSMQ。消息在私有队列中可用。我有一个WCF订阅者(用C#编写),它作为Windows服务安装。现在问题是有时WCF订户停止从队列中选择消息。如果我再次重新启动服务它工作正常。现在我附加IError处理程序来记录原因和异常。

现在处理这个问题我想要做的是,我将恢复属性设置为在第一次失败时重新启动服务,现在问题是如何从HandleError() IErrorHandler class方法抛出错误?

请告诉我在窗口服务中抛出异常的最佳方法,以便重新启动它。

2 个答案:

答案 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(带有日志记录),以防止任何异常崩溃服务,这与你的建议相反。

可能是您可以捕获错误并停止服务(不确定)并将服务配置为在停止时重新启动?