.net-core - 作为 Windows 服务运行时,在 .net core 3 的工作服务中未调用 StopAsync
问题描述
想知道你们以前是否遇到过这种情况。我想让 grpc server+web api 作为 Windows 服务运行,因为它意味着长时间运行的过程。Web API 基本上只是用于运行时监控内部状态。所以我创建了一个新的 grpc 服务(.net core 3),并添加了工作类,并添加了控制器等。并使用了 Microsoft.Extensions.Hosting .WindowsServices nuget 包以启用 Windows 服务。我用“sc create binpath= start= auto”安装它,然后用“sc start”启动它。观察日志文件,我可以看到它已经启动,访问swagger页面,我可以看到它运行良好。
当在工作人员类中调用 StartAsync 和 StopAsync 时,我将某些内容记录到日志文件中,并且我可以看到,当服务启动时,应该调用 StartAsync。
现在有趣的是,当系统重新启动时,我没有看到 StopAsync 被调用..
在 DOS 中,如果我使用 dotnet .exe 运行它,则会调用 StartAsync,按 CTRL+C 停止它,调用 StopAsync .. 但是为什么当它作为 Windows 服务运行并重新启动系统时没有调用 StopAsync?这是windwos服务nuget包本身的错误吗?还是我在这里遗漏了什么?
有趣的是,在 Startup 类中,我什至使用 IHostApplicationLifetime 来拦截 ApplicationStarting、ApplicationStopping ,但是再次调用了starting,但没有调用stopping ..为什么?
有人可以启发我吗?
解决方案
.net core 团队的好人已经知道这个问题,并将在 .net core 5.0 中解决它。参考这里:https ://github.com/aspnet/Extensions/pull/2705
预计 2020 年底。
推荐阅读
- php - 如何使用 bootstrap 和 php 在幻灯片中创建多项,
- python - python程序从嵌套列表中删除重复元素
- css - 有没有办法在没有 HTML 的情况下为 CSS 剪辑添加边框
- python - 在python中连接两个图像但颜色已更改
- python - 如何使用 ROI(Region of Interest)/Point 而不是鼠标单击事件来选择帧上的一个点
- sql - Cross Join with min and max condition
- sql - 添加多对多关系会产生一个空查询集
- python - 基于偏差的骰子结果评估
- python-3.x - Pandas 中的相关性 - AttributeError:“float”对象没有属性“shape”
- python - 使用 Pulp 在工作日平均分配数量(需求)