更新计划

这段时间,会陆续把去年一年在公司做的相关培训,整理成博客分享给大家,在团队内部已经把大部分的.net项目容器化并部署到k8s,中间也踩了很多坑,也会把相关问题整理处理,大家一起学习交流,哈。

.net程序员为什么要学习.net core

  • .Net Core 是.Net的未来,微软在19年 5月已经明确说明,未来只有.Net 5(=.NET Core vNext),.Net 5是.net core的下一个版本,你可以用它来开发Windows,Linux,MacOs,IOS,Android等等应用。

图片来源

  • 在容器、k8s、Devops、微服务等技术的推动下,2020年云原生将势不可挡,.net Cor而设计之初就了适配云原生,它有很多优点,都说明它是云原生时代,是一个很好的选择。
  • 它体积更小,启动速度更快、占用资源更少、支持水平扩展
  • 考虑自己的职业发展,.net core也是必须需要熟悉的

什么是.Net Core

  • 开源通用的开发框架 github地址,微软和社区共同维护
  • .net core 模块化管理,按需引用对应组件
  • 支持跨平台、跨架构开发,部署灵活
  • 兼容性强
  • 支持命令行
  • 包含了.Net Framework的类库 (3.0版本之前很多都是从.Net Framework类库移植的,现在已经不再移植老的代码 )

.Net Core和.Net Framework的区别

推荐一篇讲的很好的文章,这里就不展开了传送门

  • 同父异母的兄弟关系
  • .Net core可以认为是.net Framework的下一代产品,到2020后都统一为.Net 5

.Net Core 3.1

  • .net core 3.1 2019年12月正式发布 LTS 可以商用
  • 兼容winform和WPF,这部分目前不跨平台、
  • 体积更小,启动速度更快,占用资源更少,支持水平扩展,更好适配云原生和微服务
  • Blazor
  • GRPC

ASP.NET Core Web应用启动

ASP.NET Core Web应用启动过程

通过上图大概可以把启动过程总结为:

创建主机生成器-配置主机->创建主机->运行主机

ASP.NET Core Web应用

主机(Host)

主机主要负责应用程序的启动和生命周期的管理,配置服务器和请求处理管道,实质是一个封装了应用资源的object

配置日志、依赖服务的注入

.Net core 中的主机分为泛型主机web主机

Kestrel 介绍

Kestrel 是 ASP.NET Core 项目模板指定的默认 Web 服务器。是一个跨平台的高性能的WEB服务器,角色定位类似于IIS,但不是IIS,它在linux下性能更强,相比于IIS它功能相对较少,不支持反向代理。

启动配置

这里说的配置,主要分为两种:

  • 主机配置
  • 服务配置。

下面我们以实际代码来看下,怎么新增和修改默认的启动配置

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

这个是我们通过vs生成的一个最简单的.net core 3.1空的模板项目。Host.CreateDefaultBuilder()这个方法默认会加载命令行参数, 加载配置 应用配置(appsettings.json)``加载环境变量,加载日志组件等默认配置。

看到这些大家可能会疑问,如果环境配型、应用配置、命令行中有相同的配置,应用会以那个配置的优先级生效呢,下面我们以最简单启动urls参数为例,验证下,这些配置的优先级。

urls 配置

.net core 中提供了三种设置urls的方法

  • 环境变量, 在 launchSettings.jsonenvironmentVariables增加ASPNETCORE_URLS来设置urls
{
"profiles": {
"CoreStudyLesson1": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://*:7000"
},
"applicationUrl": "http://localhost:5000"
}
}
}

运行效果

  • 应用配置。修改appsettings.json,增加urls节点
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"urls":"http://*:8000"
}

运行效果

  • 命令行启动, 使用 --urls 参数指定url
dotnet run --urls https://*:9000

运行效果

  • 代码指定

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
// 设置监听Url 命令行 硬编码 应用配置 环境变量
webBuilder.UseUrls("http://*:6001");
});
}

运行效果

具体优先级是

命令行 >应用配置>硬编码>环境变量

组件配置-Kestrel配置

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
// 配置web主机 kestrel
.ConfigureWebHostDefaults(webBuilder =>
{
//组件配置
webBuilder.ConfigureKestrel((context,options)=>
options.Limits.MaxConcurrentConnections=10);//默认没有限制
// 主机配置项
webBuilder.UseStartup<Startup>();
});
}

组件配置log配置

移除默认的日志组件,并添加制定的logProvider.

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
} public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
// 配置web主机 kestrel
.ConfigureWebHostDefaults(webBuilder =>
{
//组件配置
webBuilder.ConfigureKestrel((context,options)=>
options.Limits.MaxConcurrentConnections=10);//默认没有限制 webBuilder.ConfigureLogging(logging =>
{
logging.ClearProviders();// 移除.net Core默认注入的日志Providers
logging.AddLog4Net();//所有日志统一使用log4net
}); // 主机配置项
webBuilder.UseStartup<Startup>();
});
}

主机配置-启动配置

 // 主机配置项
webBuilder.UseStartup<Startup>();

.Net Core初识以及启动配置的更多相关文章

  1. 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等

    设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...

  2. ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]

    入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...

  3. 【推荐】CentOS安装Tomcat-7.0.57+启动配置+安全配置+性能配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Tomcat之前,请确保已经安装了JDK-1.7环境,具体见<CentOS安装JDK-1.7>. ...

  4. Net Core子应用由于配置引起IIS错误500.19

    Asp.Net Core子应用由于配置中重复添加模块会引起IIS错误500.19 ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS. 但我们还是需要强大的IIS作为前 ...

  5. Net Core MVC6 RC2 启动过程分析

    入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢?.NET Web Development and Tools Blog ASP.NET ...

  6. 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)

    Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...

  7. .net core 修改网站启动端口

    原文:.net core 修改网站启动端口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yenange/article/details/81675 ...

  8. [ASP.NET Core 3框架揭秘] 配置[2]:读取配置数据[下篇]

    [接上篇]提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义 ...

  9. [ASP.NET Core 3框架揭秘] 配置[6]:多样化的配置源[上篇]

    .NET Core采用的这个全新的配置模型的一个主要的特点就是对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源.如果采用物理文件作为配置源,我们可以选择 ...

随机推荐

  1. DOCKER学习_009:Docker的镜像管理

    1 查看镜像 [root@docker-server3 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis days ago ...

  2. 【瞎讲】 Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18)

    [背诵瞎讲] Cayley-Hamilton 常系数齐次线性递推式第n项的快速计算 (m=1e5,n=1e18) 看CSP看到一题"线性递推式",不会做,去问了问zsy怎么做,他并 ...

  3. [Oracle]Oracle的闪回归档

    Oracle的闪回归档 场景需求,由于管理数据库的一些核心表,在实施初期会有人为误删除的问题.Oracle 11gR2提供了闪回归档的特性,可以保证不用RMAN来恢复误删除的数据.实践如下: 1.创建 ...

  4. Mysql备份与恢复(2)---逻辑备份

    数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小.上一篇针对使用xtrabackup工具进行物理备份和数据恢复做了一个详细讲解,本篇 ...

  5. Linux环境下部署svn服务详解

    说明 环境: 操作系统:centos 8.0 IP:39.100.228.13 安装 用ROOT账号登录,在控制台执行以下命令,一直默认安装就好可以了. [root@localhost ~]#yum ...

  6. 现状、趋势如何?——《2019 年度 SaaS 行业【企业愿景】展望 · 总结篇》

    SaaS 行业产业地图和行业规模 看完SaaS的概念介绍,聪明的小伙伴们应该都理解了SaaS到底是个什么东西,但TOB的应用一般会离生活比较远,这里直接上产业地图,让大家对常见的SaaS产品有一个直观 ...

  7. 关于Scrum+XP+DevOps的学习

    最近听了ECUG大会上孙敬云老师的分享感觉受益匪浅,毕竟大学课本上只讲到瀑布模型就没有下文了,工作以后一直贯彻的都是Scrum路线,一直也没有时间好好的去学习整理这部分的知识,直到近几天听到了孙老师的 ...

  8. 《提升能力,涨薪可待》—Java并发之Synchronized

    Synchronized简介 线程安全是并发编程中的至关重要的,造成线程安全问题的主要原因: 临界资源, 存在共享数据 多线程共同操作共享数据 而Java关键字synchronized,为多线程场景下 ...

  9. Match3 Module For Game(THDN)

    介绍    THDN的核心机制为Match3的利用,本文对Match3 Gameplay进行记录,并对其进行改良.THDN作为RogueLIke性质的游戏,玩家在随机生成的dungeon里进行探索并获 ...

  10. extract函数的使用

    EXTRACT(field FROM source) extract函数从日期/时间数值里抽取子域,比如年.小时等. source必须是一个timestamp, time, interval类型的值表 ...