点击上方蓝字关注“汪宇杰博客”

常言道,多喝热水,重启试试。有时候当应用工作不正常,重启也许能解决问题。但是程序员通常接触不到服务器系统权限。而运维人员和公司流程经常人为制造麻烦阻止我们去重启应用。老实的程序员不善言辞交际,只能放弃重启,干看代码,加班猝死。其实,我们可以在代码里给自己留一个重启应用的方法,教教他们别惹程序员的道理。

IApplicationLifetime

ASP.NET Core 有个很牛逼的接口,叫做IApplicationLifetime。它能用来处理网站启动后,以及停止网站的任务。

这个接口提供了3个Cancellation Token,允许安排Action委托来处理应用启动和关闭的事件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime)

{

appLifetime.ApplicationStarted.Register(() =>

{

_logger.LogInformation("Moonglade started.");

});

appLifetime.ApplicationStopping.Register(() =>

{

_logger.LogInformation("Moonglade is stopping...");

});

appLifetime.ApplicationStopped.Register(() =>

{

_logger.LogInformation("Moonglade stopped.");

});

// ... 其他代码

}

ApplicationStarted 发生在应用启动成功以后,也就是Startup.Configure()方法结束后。

ApplicationStopped 发生在程序正在完成正常退出的时候,所有请求都被处理完成。程序会在处理完这货的Action委托代码以后退出。

ApplicationStopping 发生在程序正在执行退出的过程中,此时还有请求正在被处理。应用程序也会等到这个事件完成后,再退出。

我的例子里,给这3个事件都记了日志,以便观察它们的行为。

让网站自尽

IApplicationLifetime 除了刚才的3个事件,还有一个StopApplication() 方法,可以干掉当前的 ASP.NET Core 应用程序。程序自杀的时候会依次执 ApplicationStopping 和 ApplicationStopped 的代码。正是基于这个,我们才能做到编程方式重启ASP.NET网站。

安排重启动作

最方便的重启网站的方式就是访问一个特定的URL啦。以ASP.NET Core MVC网站为例,我们可以这样玩:

依赖注入

注入一个IApplicationLifetime到Controller里。比如我博客后台的AdminController:

public class AdminController : MoongladeController

{

IApplicationLifetime applicationLifetime;

public AdminController(MoongladeDbContext context,

ILogger<AdminController> logger,

IOptions<AppSettings> settings,

IConfiguration configuration,

IHttpContextAccessor accessor, IApplicationLifetime appLifetime)

: base(context, logger, settings, configuration, accessor)

{

applicationLifetime = appLifetime;

}

// ...

}

自杀开关

定义一个Action,用来停止当前ASP.NET Core网站:

[HttpGet("blow-me-up")]

public IActionResult BlowMeUp()

{

applicationLifetime.StopApplication();

return new EmptyResult();

}

现在,只要访问 blow-me-up 这个URL,网站就会自杀:

并且我们能看到正确的日志输出

重新启动ASP.NET Core网站特别简单,在IIS等host环境下,只要发一个新的request就能自动重启!也就是重新访问一下我们的网站即可~

今天就介绍这些内容。祝大家编程快乐,遇到问题先喝热水再重启,一定能解决 :)

编程方式重启 ASP.NET Core 网站相关推荐

  1. Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站

    点击上方蓝字关注"汪宇杰博客" 导语 微软智慧云 Azure 上虽然早就有 App Service 这种完全托管的 PaaS 服务可以让我们分分钟建网站.但是不自己配一下环境,就不 ...

  2. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  3. 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二--添加一个实体 学习ASP.NET ...

  4. 如何在宝塔面板启用 ASP.NET CORE 网站并自动申请 HTTPS 证书

    要想在 Linux 上部署 ASP.NET CORE 网站,除了使用"宇内流云"大神的 Jexus 之外就是使用 Nginx 对 ASP.NET CORE 网站进行反向代理. 常规 ...

  5. ASP.NET Core 网站运行时修改设置如何自动生效

    点击蓝字 关注我 在ASP.NET Core中,如果修改了appsettings.json中的设置,那么默认情况下就得重启网站才能生效.有没有办法在修改设置后自动刷新并应用呢? 背景 首先,我们看看默 ...

  6. ASP.NET Core 网站发布到Linux服务器

    长期以来,使用.NET开发的应用只能运行在Windows平台上面,而目前国内蓬勃发展的互联网公司由于成本的考虑,大量使用免费的Linux平台,这就使得.NET空有一身绝技但无法得到广大的施展空间,.N ...

  7. ASP.NET Core网站使用Nginx布署Linux上配置和发布及相关代码

    本文主要介绍使用ASP.NET Core开发的网站,运行布署在Linux上的方法,包括.NET Core SDK找安装,项目的发布和网站运行及开机自动启动及Nginx相关配置方法 . 原文地址:ASP ...

  8. 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二--添加一个实体 学习ASP.NET ...

  9. 以编程方式在ASP.NET MVC中使用多个HTML Select控件

    目录 介绍 使用代码 使用JQuery 使用Razor和C# 兴趣点 介绍 很多时候,我们使用JavaScript或JQuery代码来操纵HTML控件,却不知道ASP.NET MVC与Razor和C# ...

最新文章

  1. 普通高中计算机课程软件,普通高中信息技术课程标准(2017 年版)(4):选修课程...
  2. VC文件扩展名解读大全
  3. LeetCode 147. Insertion Sort List 链表插入排序 C++/Java
  4. ubuntu21.04安装微信3.2.1(deepin-wine方式)
  5. groovy+mysql数据库_使用Groovy连接到MySQL
  6. 2018-2019-2 网络对抗技术 20165320 Exp2 后门原理与实践
  7. 好久以来,就想为你写一首诗
  8. redhat linux 5.6 下安装oracle 11g 时netca报错不能配置监听解决方法
  9. 服务器Linux系统下常见的软件包有哪些
  10. 在职攻读教育硕士专业学位有计算机专业吗,在职攻读教育硕士专业怎样?
  11. 网络安全现状及防范措施
  12. 关于人脸识别,Taylor Swift是认真的
  13. [Office] 公务员WPS Excel常用的一些技巧方法
  14. 面向对象学习笔记——封装、继承、多态
  15. dataguard 日志的应用
  16. Radis-哨兵服务
  17. Android 给EditText添加下划线
  18. jvectormap的自定义地图和区域上色、图片标记
  19. oracle和toad,oracle和toad
  20. echarts实现离线世界地图(国内)展示

热门文章

  1. AWD-LSTM为什么这么棒?
  2. CSS浮动属性Float到底什么怎么回事,下面详细解释一下
  3. Docker Storm开发环境搭建
  4. GPG key retrieval failed: [Errno 14]
  5. Linux重定向详解
  6. Outlook 阅读窗格(Reading Pane)
  7. C# 观察文件的更改
  8. 秀!微软《550页图解.Net+WPF完整版》.pdf 附下载!
  9. RabbitMQ简介和六种工作模式详解
  10. 对MySQL 进行深入学习是非常必要的