Service Fabric 来宾可执行文件托管和优雅停止
Posted
技术标签:
【中文标题】Service Fabric 来宾可执行文件托管和优雅停止【英文标题】:Service Fabric Guest Executable hosting and graceful stop 【发布时间】:2017-01-28 12:22:45 【问题描述】:我有一个要在 Service Fabric 中托管的 .NET 4.6.2 控制台应用程序。 我的应用程序正在监听管理任务的控制台输入事件。
最重要的是 'q' 停止应用程序 - 但以优雅的方式。
是否有可能在带有来宾可执行文件的 Service Fabric 中也具有此功能? 当然不是在“按下 q 按钮”上,而是在服务已删除或发生的任何事件上。
如果无法实现与来宾可执行文件的这种集成 - 您建议在哪个项目模板上进行构建?
【问题讨论】:
【参考方案1】:Service Fabric 在终止来宾可执行进程之前向其发送一个 Ctrl-C 信号,从而允许正常关闭。您可以使用Console.CancelKeyPress
事件或Win32 SetConsoleCtrlHandler
函数来获取通知。请注意,必须将 exe 编译为控制台应用程序才能正常工作。
【讨论】:
使用来宾可执行方法我绝对无法获得 Ctrl-C 信号。我有一个编译的控制台应用程序。这具体记录在哪里?我需要任何额外的EnableActivateNoWindow
setting你也不会收到信号。【参考方案2】:
在您的有状态或无状态服务类中:
class MyService : StatefulService /* or StatelessService */
protected override Task OnCloseAsync(CancellationToken cancellationToken)
// your graceful shutdown code goes here
但不能保证该方法的执行,例如当托管 VM 意外死亡时。
【讨论】:
我考虑过使用一个有状态的服务项目模板来完成这个练习。我不确定这是否是最好的方法。感觉不对(误用模板):-)【参考方案3】:执行此操作的一种方法是使用DeleteServiceAsync 以编程方式在您完成服务后删除该服务 你也可以重新创建它,使用CreateServiceAsync
【讨论】:
以上是关于Service Fabric 来宾可执行文件托管和优雅停止的主要内容,如果未能解决你的问题,请参考以下文章
管理来宾可执行文件依赖项 - 本地 Service Fabric
Service Fabric 命名服务未转发到分配给来宾可执行文件的端点