Service Fabric 来宾可执行文件托管和优雅停止

Service Fabric Guest Executable hosting and graceful stop

我有一个 .NET 4.6.2 控制台应用程序,我想在 Service Fabric 中托管。 我的应用程序正在监听管理任务的控制台输入事件。

最重要的是'q'停止应用程序 - 但以优雅的方式

是否可以通过来宾可执行文件在 Service Fabric 中也具有此功能?
当然不是在 'q button pressed' 上,而是在服务删除或任何事件上。

如果无法实现与来宾可执行文件的这种集成 - 您建议在哪个项目模板上构建?

执行此操作的一种方法是在您完成服务后以编程方式删除该服务,使用 DeleteServiceAsync 您也可以使用 CreateServiceAsync

重新创建它

在你的有状态或无状态服务中class:

class MyService : StatefulService /* or StatelessService */
{
    protected override Task OnCloseAsync(CancellationToken cancellationToken)
    {
        // your graceful shutdown code goes here
    }
}

但是无法保证该方法的执行,例如当托管 VM 意外死亡时。

Service Fabric 在终止来宾可执行进程之前向其发送 Ctrl-C 信号,以允许正常关闭。您可以使用 Console.CancelKeyPress 事件或 Win32 SetConsoleCtrlHandler 函数来获取通知。请注意,必须将 exe 编译为控制台应用程序才能正常工作。