繁体   English   中英

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

[英]Automatically restart a self hosted wcf service on crash

我有一个自托管的wcf服务,该服务通过dll导入和pinvoke使用旧版c ++代码。 在旧代码中有一些实例,这些异常来自功能(在旧应用程序中处理,但不在服务中处理),当它们发生时,我的服务就停止了。 例外情况很少见; 但是,我不希望我的服务只是由于另一个程序集的崩溃而随机停止。 异常不会影响服务,因此我无法在服务中尝试/捕获它们。 有没有一种方法可以使服务自动崩溃?

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

提前致谢!!

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

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

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

好吧,我假设您正在为自己的工作创建Windows Service项目。 进入您的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();
}

注意:我从另一个问题中 窃取了此代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM