更新计划

这段时间,会陆续把去年一年在公司做的相关培训,整理成博客分享给大家,在团队内部已经把大部分的.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. 机器学习实战笔记(一)- 使用SciKit-Learn做回归分析

    一.简介 这次学习的书籍主要是Hands-on Machine Learning with Scikit-Learn and TensorFlow(豆瓣:https://book.douban.com ...

  2. 克隆linux系统后,将eth1修改成eth0

    使用VMware克隆的linux系统之后,发现网卡信息只有eth1,却没有eth0.将eth1修改成eth0. 1.vi /etc/udev/rules.d/70-persistent-net.rul ...

  3. 傅立叶变换—FFT(cuda实现)

    背景: 无意间看到cuda解决FFT有一个cufft函数库,大体查看了有关cufft有关知识,写了一个解决一维情况的cuda代码,据调查知道cufft在解决1D,2D,3D的情况时间复杂度都为O(nl ...

  4. xshell连接kali linux虚拟机

    这次测试一波三折 刚开始在百度经验看的先修改ssh参数,蓝色的字是百度的,重点都在图片上 1.修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#Passwo ...

  5. 网络、TCP协议与UDP协议

    1.网络模型 (1)什么是网络模型 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外 ...

  6. Java8 新特性(二)- Stream

    Stream 用来处理集合数据的,通过 stream 操作可以实现 SQL 的拥有的大部分查询功能 Java8 API 官方文档 下面借助例子,演示 stream 操作 Java userList 列 ...

  7. Tarjan求割点和桥

    by szTom 前置知识 邻接表存储及遍历图 tarjan求强连通分量 割点 割点的定义 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多, ...

  8. Java框架之Spring02-AOP-动态代理-AspectJ-JdbcTemplate-事务

    AOP 动态代理 代理设计模式的原理:使用一个代理将原本对象包装起来,然后用该代理对象”取代”原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方法调用转到原始对象上. 代理模式的 ...

  9. 【C&数据结构】---关于链表结构的前序插入和后序插入

    刷LeetCode题目,需要用到链表的知识,忽然发现自己对于链表的插入已经忘得差不多了,以前总觉得理解了记住了,但是发现真的好记性不如烂笔头,每一次得学习没有总结输出,基本等于没有学习.连复盘得机会都 ...

  10. struts2学习第一天

    Stuts2是基于MVC设计模式成熟的Web应用框架.不仅仅是Struts1的下一个版本,是一个全新的Struts架构.由WebWork社区跟Strut社区联手打造的.(教程来自W3Cschool) ...