专栏首页汪宇杰博客编程方式重启 ASP.NET Core 网站

编程方式重启 ASP.NET Core 网站

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

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就能自动重启!也就是重新访问一下我们的网站即可~

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

文章分享自微信公众号:
汪宇杰博客

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

如有侵权,请联系 yunjia_community@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 使用Jexus 5.8.2在Centos下部署运行Asp.net core

    晓晨
  • Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站

    微软智慧云 Azure 上虽然早就有 App Service 这种完全托管的 PaaS 服务可以让我们分分钟建网站。但是不自己配一下环境,就不能体现技术含量,容...

    Edi Wang
  • Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET、PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器。最新版 5.8...

    张善友
  • ASP.NET Core快速入门(第1章:介绍与引入)--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore

    郑子铭
  • .NET Core实战项目之CMS 第十七章 CMS网站系统的部署

    目前我们的.NET Core实战项目之CMS系列教程基本走到尾声了,通过这一系列的学习你应该能够轻松应对.NET Core的日常开发了!当然这个CMS系统的一些...

    依乐祝
  • ASP.NET Core 各版本特性简单整理

    简单整理了 ASP.NET Core 从1.0到5.0的变迁,不包括小版本, 内容主要来自 MS Docs。

    晓晨
  • 结合Jexus + Kestrel 部署 asp.net core 生产环境

    ASP.NET Core 是微软的全新的框架。这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖。 获得下面三个方面的优势,你可以把...

    张善友
  • 为什么现在已经有超过500万的开发者选择了ASP.NET Core?

    ASP.NET Core 是一个新的开源和跨平台的框架,用于构建如 Web 应用、物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序。

    海拥
  • PluginCore | 开发笔记

    本文链接: https://moeci.com/posts/分类-dotnet/PluginCore-notebook/

    yiyun
  • 【asp.net core 系列】 1 带你了解一下asp.net core

    这是一个新的系列,名字是《ASP.NET Core 入门到实战》。这个系列主讲ASP.NET Core MVC,辅助一些前端的基础知识(能用来实现我们需要的即可...

    程序员小高
  • 一个适合.NET Core的代码安全分析工具 - Security Code Scan

      本文主要翻译自Security Code Scan的官方Github文档,结合自己的初步使用简单介绍一下这款工具,大家可以结合自己团队的情况参考使用。此外,...

    Edison Zhou
  • asp.net core开发环境准备

    1.1 安装sdk和运行时 浏览器打开网址https://www.microsoft.com/net/download, 到.Net Core下载页面。 ? ...

    用户1631416
  • ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布。这个版本包括许多伟大的新功能以及许多错误修复和一般的增强。这个版本包含了多个新的中间件组件、针对...

    张善友
  • ASP.NET Core 2.2使用IIS部署要注意的路径问题

    ASP.NET Core 2.2 推出已经有一段时间了,其中有个新功能,能够使用新的AspNetCoreModuleV2并且在IIS上使用InProcess模式...

    Edi Wang
  • ASP.NET Core 应用发布与部署指南/教程

    项目创建完成后,需要修改Program.cs文件 手动指定启动的Url为:http://*:5000

    KenTalk
  • 使用分布式缓存对ASP.Net Core性能提升?

    程序你好
  • 《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记

    ASP.NET Core 应用程序支持部署到 IIS 中,之后它将作为应用程序的反向代理服务器和负载均衡器,向应用程序中转传入的 HTTP 请求

    郑子铭
  • 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践

    云服务器(Cloud Virtual Machine,CVM)为您提供安全可靠的弹性计算服务。 只需几分钟,您就可以在云端获取和启用 CVM,来实现您的计算需求...

    痴者工良
  • CentOS 7部署ASP.NET Core应用程序

    网上看了一下,Linux云服务器还挺贵的,那就只好先用VMware虚拟机搭建个吧。这里我选装的Linux系统版本的是CentOS,Linux系统众多发行版之一,...

    Esofar

扫码关注云+社区

领取腾讯云代金券