1

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

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

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

4

2 回答 2

1

虽然解决异常的根本原因可能更好,但在某些情况下实施快速失败方法肯定是有效的。事实上,这种杀死以某种方式变得“有缺陷”的进程的能力对于容错的概念至关重要。

因此,要使 Windows 服务自杀:

void KillSelf()
{
    try
    {
        // Code to close open connections/dispose 
        // of unmanaged resources etc
        ...
    }
    finally
    {
        Environment.Exit(1);
    }
}

服务恢复选项应设置为自动重新启动。这将确保您的服务再次恢复正常。

于 2015-10-07T15:03:20.797 回答
0

据我所知,不能抛出异常来重新启动 Windows 服务。

我通常封装一个try catch(带日志记录)以防止任何异常使服务崩溃,这与您的建议相反。

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

于 2013-05-21T18:06:35.550 回答