【问题标题】:wcf windows service recovery programwcf windows服务恢复程序
【发布时间】:2016-10-25 14:26:13
【问题描述】:

我有一个托管 WCF 服务器的 Windows 服务。 我使用“sc config....”和“sc failure...”来设置以下属性: 1)登录凭据 - 本地用户 2) 恢复 - 前 2 次失败重新启动服务,然后运行程序(.bat 或 .cmd)

我尝试使用几种使服务崩溃的方法对其进行测试,但没有一种方法能够恢复。 我尝试通过任务管理器,taskkil,在代码中抛出异常,除以零...

什么都没有发生 - 没有重新启动也没有运行程序。 有什么想法吗?

【问题讨论】:

  • 要让服务自行终止,请使用Environment.Exit(1);
  • 谢谢汤姆,我试过了(在服务启动期间和我发送请求后),它确实失败并崩溃,但没有恢复。我在使用“本地系统帐户”和用户帐户时尝试过,程序位于特定文件夹和“system32”文件夹中。

标签: c# wcf windows-services


【解决方案1】:

我敢打赌,wcf 服务是在包含服务的线程中生成的,并且主线程不会像您期望的那样因子抛出异常而退出。

See this article.

由于这个异常是在不同的线程上引发的,而不是 主线程,我需要订阅 AppDomain 的 UnhandledException 事件。如果我不这样做,线程就会默默地死去,然后 服务将继续运行,这不是我想要的。

【讨论】:

  • 感谢罗斯,这解决了问题 - 我可以重新启动服务,但仍然无法运行程序。我尝试运行一个 .bat 和一个 .cmd 文件,我看到我应该使用forcedos.exe 和该文件作为参数 - 但这些都不起作用。
  • 您是否正在创建自己的服务应用程序并实例化 wfc 主机?
  • 是的,它似乎有效,但我仍然遇到一个问题 - 当我的脚本删除一个文件时,我看到了它。但是当我启动 cmd.exe(例如)时,我在任务管理器中看到它,但在屏幕上看不到。
  • 除非您告诉它,否则该 cmd dos 窗口将等待用户输入。如果您在 cmd 脚本末尾添加 PAUSE 命令,则 dos 窗口将一直显示在屏幕上,直到您将其关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 2017-04-09
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多