第67篇 .net core简述
1.什么是.net core
net core 是一个跨平台的高性能开源框架用具生成基于云连接的Internet的新的应用程序,可以建造web应用程序和服务,
lot应用和移动后端,可以在Windows,macOS,和Linux上进行开发和部署,
在asp.net4.x重新设计更改了体系结构形成了更精简的模块化框架
1.1 .net core的特点:
跨平台,自托管,开源,高性能。
1.2 .netcore的优点:
- 1)生成webui和webapi的统一场景,
- 2)集成新式客户端框架和开发工作流,
- 3)基于环境的云就绪配置系统,
- 4)内置依赖注入,(可以使用第三方替换)
- 5)轻型的高性能模块化的HTTP请求管道,
- 6)能够在IIS,nginx,Apache,docker上进行委托管或在自己的进程中进行托管,
- 7)定目标到.net core ,时可以使用并行应用版本控制,
- 8)简化新式的web开发工具,
- 9)开源代码和以社区为中心,
且.net core 完全作为nuget包提供,借助nuget包可以将应用优化减少到只包含到必须的依赖项,提升了安全性,减少了维护和提高性能。
2..net core框架性能测试
3..net core执行过程--基于Kestrel的控制台程序
代理服务器:
iis为我们做了两件事
1.应用程序服务器(nfx),解析动态程序,例如aspx
2.反向代理,将解析后的资源或静态资源,代理出去
.net core使用iis做反向代理与用nginx有区别呢
4.中间件执行过程
4.1 http管道化,HttpContext上下文
中间件是组装到应用程序管道中的软件,用于处理请求和响应。
每个组件:
选择是否将请求传递到管道中的下一个组件。
可以在管道中的下一个组件之前和之后执行工作。
4.2 中间件的三种写法:
4.2.1 Run
//Run 方法没的执行
app.Run(async context =>
{
loger.LogInformation("run 1 start");
await context.Response.WriteAsync("hello world!,run 1");
loger.LogInformation("run 1 end");
});
4.2.2 Use
//use 方法 执行了
app.Use (async (context,next) =>
{
loger.LogInformation("Use 1 start");
await context.Response.WriteAsync("hello world!,Use 1");
loger.LogInformation("Use 1 end");
});
例如:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseSession();
app.UseMvc();
4.2.3 Map & MapThen
4.3 中间件与模块处理程序的区别
HttpModule 和 HttpHandler:
ASP.NET其请求处理过程是基于管道模型的,这个管道模型由多个HttpModule和HttpHandler组成。
在整个生命周期中,它们大致的执行过程是这样的:client端发送页面请求,被IIS的某个进程截获,它根据申请的页面后缀(.aspx)不同,调用不同的页面处理程序(.asp->asp.dll;.aspx->ISAPI.dll),而页面处理程序在处理过程中,则要经历 HttpModule,HttpHandler的处理,前者HttpModule用于页面处理前和处理后的一些事件的处理,后者HttpHandler进行真正的页面处理。
中间件比HTTP模块和处理程序更简单:
模块、处理器Global.asax。计算机科学,网络。配置(IIS配置除外)和应用程序生命周期都没有了中间件已经接管了模块和处理程序的角色中间件是使用代码配置的,而不是在Web.config中配置的管道分支允许您将请求发送到特定的中间件,不仅基于URL,还基于请求头、查询字符串等。
中间件与模块非常相似:原则上为每个请求调用,能够通过不将请求传递给下一个中间件而使请求短路,能够创建自己的HTTP响应
中间件和模块的处理顺序不同:
中间件的顺序基于它们插入请求管道的顺序,而模块的顺序主要基于应用程序生命周期事件:
中间件对响应的顺序与请求的顺序相反,而模块对请求和响应的顺序是相同的,参见使用IApplicationBuilder创建中间件管道
5.源于配置:Configure Services、ApplicationSettings
6. 构建WebHost - WebHostBuilder()
6.1 CreateDefaultBuilder(创建WebHost,默认配置)
创建HostBuilder对象
指定Host要使用的内容根目录
配置初始化(环境变量、appsettings.json、User Secrets)
指定kestrel服务器
日志
在开发环境模式下启用作用域验证(UseDefaultServiceProvider)
6.2 UseContentRoot
指定web主机要使用的内容站点根目录
这个设置决定了ASP.NET Core开始搜索内容文件,比如MVC视图。
内容根也用作Web根设置的基本路径。如果路径不存在,则主机无法启动。
.UseContentRoot("c:\\<content-root>")
6.3 UseConfiguration
使用web主机上给定的配置设置
6.4 UseKestrel
指定Kestrel作为web主机使用的服务器
6.5 ConfigureAppConfiguration
ConfigureAppConfiguration
CreateDefaultBuilder >> WebHostBuilder >> IConfiguration 依赖注入
这个方法专门用来为 WebHostBuilder添加配置 IConfiguration,包括appsettings.json的、命令行参数以及环境变量
后加载覆盖模式
6.6 ConfigureLogging
添加一个委托,用于配置提供Log(多次调用)
6.7 ConfigureServices
添加一个委托,用于为主机或web应用程序配置其他服务。(多次调用)
UseIIS / UseIISIntegration
IIS worker process 工作进程,
IISExpress 进程内 InProcess 性能好(不代表iis高于kestrel)
w3wp.exe或iisexpress.exe
配置服务器在运行时应该监听的端口和基本路径
AspNetCoreModule后面。应用程序也将被配置为捕获启动错误
6.8 UseStartup()
Startup.cs这个类主要做两件事情的配置Service DI和http管道,这些都是在WebHost启动之前就需要确定下来的
6.9 Build() —— 构建
1、构建一个Microsoft.AspNetCore.Hosting。托管web应用程序的IWebHost。
2、Build()方法是Microsoft.Extensions.Hosting中,并且该方法只会执行一次,当然这种一次只是在同一个实例里面.
6.10 Run() —— 启动
运行web应用程序并阻塞调用线程,直到主机关闭。
6.11 InProcess && OutOfProcess
ASP.NET Core 进程内(InProcess)托管
进程内托管”可依托 IIS 获得更高的吞吐量,
选择进程内托管,意味着将 .NetCore 应用程序的工作进程托管到 IIS 的工作进程 w3wp.exe 中,使用的 IIS 进程内服务器,即使用的是:IISHttpServer。
ASP.NET Core 进程外(out-of-process)托管
选择进程外托管,实际上就是告诉 IIS ,当前应用程序不使用IISHttpServer,改为使用 Kestrel 服务器
1、可以直接浏览器访问 查看 server
2、任务管理器 ,worker
7.net core开发者必学知识:
English、C#、Linq、MVC、Razor、REST、Route、DI/IoC、AOP、Filter&Attributes、Cache、ORM