更新计划

这段时间,会陆续把去年一年在公司做的相关培训,整理成博客分享给大家,在团队内部已经把大部分的.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. TCP/IP||ARP/RARP

    1.ARP ARP(地址解析协议)主要为IP地址到对应的硬件提供动态映射,过程是自动完成 在网络接口有一个硬件地址(48 bit),在硬件层次上的数据帧交换必须有正确的接口地址,但是32 bit 的I ...

  2. 如何利用腾讯云COS为静态博客添加动态相册

    前言 本文首发于个人网站Jianger's Blog,欢迎访问订阅.个人博客小站刚建站不久,想着除了主题里的功能外再添加上相册模块,于是半搜索半摸索把相册模块搞出来了,最后采用了利用腾讯云对象存储作图 ...

  3. 从头学pytorch(九):模型构造

    模型构造 nn.Module nn.Module是pytorch中提供的一个类,是所有神经网络模块的基类.我们自定义的模块要继承这个基类. import torch from torch import ...

  4. 20191031-4 beta week 1/2 Scrum立会报告+燃尽图 02

    此作业要求参见 https://edu.cnblogs.com/campus/nenu/2019fall/homework/9912 git地址:https://e.coding.net/Eustia ...

  5. ssh保持连接不断开

    使用ssh连接服务器,长时间不使用,会自动断开,控制台会卡死无法使用,现提供以下两个方案解决这个问题: [服务器主动保持连接] 修改服务器配置文件: vim /etc/ssh/sshd_config ...

  6. Linux系统下 docker安装命令

    centos sudo: 使用 root 权限登录 Centos.确保 yum 包更新到最新.yum update 卸载旧版本(如果安装过旧版本的话)yum remove docker docker- ...

  7. 「洛谷P2397」 yyy loves Maths VI (mode) 解题报告

    P2397 yyy loves Maths VI (mode) 题目背景 自动上次redbag用加法好好的刁难过了yyy同学以后,yyy十分愤怒.他还击给了redbag一题,但是这题他惊讶的发现自己居 ...

  8. Android短视频滑动播放(一)

    本文主要介绍采用RecyclerView配合PagerSnapHelper实现短视频滑动播放内容. 1. 主页内容构建 主页布局文件定义RecyclerView,为RecyclerView建立对应适配 ...

  9. BigInteger&BigDecimal类

    BigInteger类 当需要处理超过 long 数值范围的大整数时,java.math 包中的 BigInteger 类提供任意精度的整数运算. 构造方式 //构造方法,将BigInteger的十进 ...

  10. Spark 配置参数

    SparkConfiguration 这一章节来看看 Spark的相关配置. 并非仅仅能够应用于 SparkStreaming, 而是对于 Spark的各种类型都有支持. 各个不同. 其中中文参考链接 ...