崩溃时自动重启自托管的wcf服务

时间:2012-11-06 14:49:35

标签: c# c++ wcf service

我有一个自托管的wcf服务,它通过dll import和pinvoke使用传统的c ++代码。在旧代码中有一些实例,其中异常来自函数(在旧应用程序中处理,但不在服务中处理),当它们发生时,我的服务正在停止。例外是罕见的;但是,我不希望我的服务因为另一个程序集中的崩溃而随机停止。例外情况不是冒泡到服务,所以我无法在服务中尝试/捕获它们。有没有办法在崩溃时自动重启服务?

它是自托管的,而不是通过IIS。

提前致谢!!

2 个答案:

答案 0 :(得分:4)

在运行服务的计算机上,您可以打开服务管理控制台(启动>运行> services.msc)。找到您的服务,右键单击它并选择“属性”。在弹出窗口中,单击“恢复”选项卡。将第一次,第二次和后续失败全部设置为重新启动服务。

如果您使用WIX安装项目,您还可以使用util:ServiceConfig元素设置这些属性。

如果您使用的是标准的ServiceInstaller,则不会内置这些选项。我建议您查看通过标准服务安装程序界面公开属性的ServiceInstaller Extension

答案 1 :(得分:1)

好吧,我假设你正在为你正在做的事情创建一个Windows服务项目。进入ProjectInstaller并找到“AfterInstall”方法。在这里,您需要添加代码以在服务控制器上执行命令以设置恢复选项。不幸的是,即使.NET有一个ServiceController,你也需要通过进程启动来执行命令。

using (var process = new Process())
{
    var startInfo = process.StartInfo;
    startInfo.FileName = "sc";
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;

    // tell Windows that the service should restart if it fails
    startInfo.Arguments = string.Format("failure \"{0}\" reset= 0 actions= restart/60000", serviceName);

    process.Start();
    process.WaitForExit();

    exitCode = process.ExitCode;

    process.Close();
}

注意:我another question

中窃取此代码