.Net Core初识以及启动配置
更新计划
这段时间,会陆续把去年一年在公司做的相关培训,整理成博客分享给大家,在团队内部已经把大部分的.net项目容器化并部署到k8s,中间也踩了很多坑,也会把相关问题整理处理,大家一起学习交流,哈。
- .Net Core初识以及启动配置
- .Net Core依赖注入、服务注册
- .Net Core中间件、应用配置
- .Net Core日志路由
- .Net Core实际开发中常用组件
- .Net Core应用部署
.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
配置日志、依赖服务的注入
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.json
的environmentVariables
增加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初识以及启动配置的更多相关文章
- 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等
设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...
- ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]
入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...
- 【推荐】CentOS安装Tomcat-7.0.57+启动配置+安全配置+性能配置
注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Tomcat之前,请确保已经安装了JDK-1.7环境,具体见<CentOS安装JDK-1.7>. ...
- Net Core子应用由于配置引起IIS错误500.19
Asp.Net Core子应用由于配置中重复添加模块会引起IIS错误500.19 ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS. 但我们还是需要强大的IIS作为前 ...
- Net Core MVC6 RC2 启动过程分析
入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢?.NET Web Development and Tools Blog ASP.NET ...
- 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)
Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...
- .net core 修改网站启动端口
原文:.net core 修改网站启动端口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yenange/article/details/81675 ...
- [ASP.NET Core 3框架揭秘] 配置[2]:读取配置数据[下篇]
[接上篇]提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义 ...
- [ASP.NET Core 3框架揭秘] 配置[6]:多样化的配置源[上篇]
.NET Core采用的这个全新的配置模型的一个主要的特点就是对多种不同配置源的支持.我们可以将内存变量.命令行参数.环境变量和物理文件作为原始配置数据的来源.如果采用物理文件作为配置源,我们可以选择 ...
随机推荐
- Excel解除'工作表保护密码',并复原密码设定
前提要求 Office 2003(也就是老版的.xls文件) 用到宏操作 可以解除[审阅->保护工作表]的密码保护,其他的密码保护不能处理. 解决方案 打开需解除保护密码的Excel文件(.xl ...
- 洛谷$P2168\ [NOI2015]$荷马史诗 贪心
正解:贪心 解题报告: 传送门$QwQ$ 昂这个就哈夫曼树板子题鸭$QwQ$,只是从二叉变成多叉了$QwQ$ 考虑用类似合并果子的方法?就从两个变成$k$个了嘛,一样的鸭,然后就做完了$QwQ$ 注意 ...
- $UVA10559\ Blocks\ $区间$dp$
\(Des\) • 有一排数量为N的方块,每次可以把连续的相同颜色的区间消除,得到分数为 区间长度的平方,然后左右两边连在一起,问最大分数为多少. • n<=1 \(Sol\) 正解状态设得奇奇 ...
- [白话解析] 深入浅出一致性Hash原理
[白话解析] 深入浅出一致性Hash原理 0x00 摘要 一致性哈希算法是分布式系统中常用的算法.但相信很多朋友都是知其然而不知其所以然.本文将尽量使用易懂的方式介绍一致性哈希原理,并且通过具体应用场 ...
- LibreOJ6279. 数列分块入门 3 题解
题目链接:https://loj.ac/problem/6279 题目描述 给出一个长为 \(n\) 的数列,以及 \(n\) 个操作,操作涉及区间加法,询问区间内小于某个值 \(x\) 的前驱(比其 ...
- 1063 计算谱半径 (20 分)C语言
在数学中,矩阵的"谱半径"是指其特征值的模集合的上确界.换言之,对于给定的 n 个复数空间的特征值 { a1+b1 i,⋯,an +bn i },它们的模为实部与 ...
- 1046 划拳 (15 分)C语言
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
- 【自建gitlab服务器】gitlab内存持续增大,出现502错误的解决办法
首先说明笔者的服务器环境,阿里云服务器:8G内存,2核.自从团队运维小伙伴搭建了gitlab之后,git push 代码时不时的就很卡,也经常出现 gitlab 反应超时,返回502错误,严重阻塞了团 ...
- Ceph 文件系统 CephFS 的实战配置,等你来学习 -- <4>
Ceph 文件系统 CephFS 的介绍与配置 CephFs介绍 Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问 ...
- [JavaScript设计模式] 什么是单例模式
概念 保证一个类仅有一个实例,并提供一个全局访问点 为什么要用单例模式 想象一下某些web应用,当点击登录按钮时,会弹出一个登录框,无论你点击多少次这个登录按钮,登录框都只会出现一个,不会出现多个登录 ...