笔记源于课堂编写:BiliBili
源视频教程:https://www.bilibili.com/video/BV1c441167KQ

第一课:创建项目(上)

1.DI的优点?

  • 解耦,没有强依赖(利于单元测试)
  • 不需要了解具体的服务类
  • 也不需要管理服务类的生命周期

1-1生命周期(注册服务)
Transient:注册的服务在每次被请求的时候都会生成一个新的实例。
Scped:一次web请求产生一个实例,web请求处理完了生命周期就停止了。
Singleton:服务的实例一旦被创建,以后请求这个服务指指挥用这个实例。

第二课:创建项目(中)

1.端点(endpoint)
端点就是Http请求的url的结尾那部分,这部分会被中间件进行处理
/{controller}/{action}
/home/index

2.ASP.NET Core应用的多样性?
MVC:/home/index
Rezor Pages:/SomePage
SingaIR:Hub/Chat

第三课:创建项目(下)

1.包管理
服务器端(后端):Nuget
前端:Npm

第四课:建立列表和表单View

asp-controller:指定控制器
asp-action:指定action
asp-route-参数名:指定参数值

1.ASP.NET Core配置信息?

  • Key-Value键值对
  • 内存里、JSON、XML、INI等文件,或者系统环境变量
  • 配置信息与配置系统是解构的
  • 可以依赖注入

2.ASP.NET Core的配置信息源?

  • appsettings.json
    • appsettings.{Environment}.json
  • Secret Manager
  • 环境变量
  • 命令行参数

第五课:View Component

1.View Component
为什么PartialView不行?因为没法添加业务逻辑;
如果在Controller里面写呢?那就无法复用
Child Action?开销太大,他也需要走完整个Controller的生命周期;

就像PartialView,但是还带有一个迷你的Controller,在这里也可以写业务逻辑。
可以使用Rezor语法来渲染View Component

第六课:Razor Page

1.MVC
Model:数据
View:HTML,Razor,TagHelpers
Controller:逻辑

2.Razor Page:(将3样东西放在一起)
数据
HTML,Razor,TagHelper
逻辑

3.Razor Page路由
(1)/Pages/Index.cshtml
/Index
(2)Pages/Department.cshtml
/Department
(3)Pages/Department/EmployeeList.cshtml
/Department/EmployeeList
(4)Pages/Depaertment/Index.cshtml
/Depaertment
/Depaertment/Index

第七课:SignaIR

1.什么是实时Web
002.2-NETCore3.x入门课堂笔记 - 图1
002.2-NETCore3.x入门课堂笔记 - 图2
**

2.SignaIR”底层”技术
而SignaIR使用了三种”底层”技术来实现实时web,分别是:
Long Polling
Server Sent Sent Event
Web Socket

3.Polling
002.2-NETCore3.x入门课堂笔记 - 图3
Polling是实现实时web的一种笨方法,他就是通过定期的向服务器发送请求,来查看度武器的数据是否有变化。
如果服务器数据没有变化,那么久返回204No Content;如果有变化就把最新的数据发送给客户端;
这就是Polling;很简单,但是比较浪费资源
SiganIR没有采用Polling这种技术。

4.Long Polling
002.2-NETCore3.x入门课堂笔记 - 图4
002.2-NETCore3.x入门课堂笔记 - 图5
Long Polling和Polling有类似的地方,客户端都是发送请求到服务器,但是不同之处是:如果服务器没有新的数据要发给客户端的haul,那么服务器会继续保持连接,知道有新的数据产生,服务器才把新的数据返回给客户端。
如果请求发出后一段时间没有相应,那么请求就会超时,这是客户端会再次发出请求。

5.Server Sent Events(SSE)
002.2-NETCore3.x入门课堂笔记 - 图6
使用SSE的话,web服务器可以在任何时间把数据发送到浏览器,可以称之为推送,而浏览器则会监听进来的信息,这些信息就像流数据一样,这个链接也会一直保持开放,直到服务器主动关闭它。
浏览器会使用一个叫做EventSource的对象用来处理传过来的信息。

6.Web Socket
Web Socket是不同于http的另一个TCP协议,他使得浏览器和服务器之间的交互式通信变的可能,使用WebSocket,消息可以从服务器发送到客户端,也可以从客户端发往服务器,并且没有像http那样的延迟,信息流没有完成的时候,TCP Socked通常是保持打开的状态。
使用现代浏览器是,SingaIR大部分情况下都会使用Web Socket,这也是最有效的传输方式。
全双工通信:客户端和服务器可以同时往对象发送消息。
并且不受SSE的那个浏览器连接数限制(6个),大部分浏览器对Socket链接数限制是(50个)
消息类型:可以是文本和二进制,Web Socket也支持流媒体(音频和视频)
其实正常的HTTP请求也使用了TCP Socket、Web Socket标准使用了握手机制吧用于HTTP的Socket升级为使用WS协议的WebSocket socker。
(1)Web Socket
002.2-NETCore3.x入门课堂笔记 - 图7

7.HTTP握手

  • 每一个WebSocket开始的时候都是一个简单的HTTP Socket
  • 客户端首先发送一个Get请求到服务器,来请求升级Socket
  • 如果服务器同意的话,这个Socket从这时开始就变成了WebSocket

002.2-NETCore3.x入门课堂笔记 - 图8

8.消息类型
WebSocket的消息类型可以是文本、二进制,也包括控制类的信息:Ping/pong和关闭。
每个消息由一个或多个Frame组成。
002.2-NETCore3.x入门课堂笔记 - 图9

9.SignaIR
SignaIR是一个.NET Core、.NET Framwork的开源实时框架。SignaIR可使用WebSocket、Server Sent Events和Long Polling作为底层传输方式。
SignaIR给予这三种技术构建,抽象与他们之上,他让你更好的关注业务而不是底层传输技术问题。
SignaIR这个框架分服务器和客户端,服务器支持ASP.NET Core和ASP.NET;而客户端出来支持浏览器里的JavsScript以外,也支持其他类型的客户端,例如桌面应用。

10.SignaIR回落机制
SignaIR使用的三种底层传输技术分别是WebSocket、Server Sent Events和Long Polliing。
其中Web Socket仅支持比较现代的浏览器,Web服务器也不能太老。
而Server Sent Events情况可能好一点,但是也存在同样的问题。
所以SignaIR采用回落机制,SignaLR有能力去协商支持的传输类型
002.2-NETCore3.x入门课堂笔记 - 图10

11.PRC
PRC可以理解为像调用本地方法一样调用远程服务;
SignaIR采用RPC范式来进行客户端与服务端之间的通信;
SignaIR利用底层传输来让服务器可以调用客户端的方法,反之亦然,这些方法可以带参数,参数也可以是复杂对象,SignaIR负责序列号和反序列化。

12.Hub
Hub是SignaIR的一个组件,他运行在ASP.NET Core应用里,所以他是服务端的一个类。
Hub使用RPC接受从客户端发来的消息,也能把消息发给客户端,所以他就是一个通信的Hub。
在ASP.NET Core里,自己创建的Hub类需要继承与基类Hub。
在Hub类里面,我们就可以调用所有客户端上的方法了,同样客户端也可以调用Hub类里的方法。
002.2-NETCore3.x入门课堂笔记 - 图11
SignaIR可以将参数序列号和反序列化,这些参数被序列化的格式叫做Hub协议,所以Hub协议就是用来序列化和反序列化的格式。
Hub协议的默认协议是JSON,还支持另外一个协议是MessagePack,MessagePack是二进制格式的。他比JSON更紧凑。而且处理起来更简单快速,因为他是二进制的。
此外,SignaIR也可以扩展使用其他协议.

第八课:Blazor简介

002.2-NETCore3.x入门课堂笔记 - 图12002.2-NETCore3.x入门课堂笔记 - 图13002.2-NETCore3.x入门课堂笔记 - 图14

1.Blazor
基于Componnet的编程模型

2.Blazor宿主模型
客户端
服务器端

3.客户端模型
002.2-NETCore3.x入门课堂笔记 - 图15

4.Mono

  • 也是一个开源的.NET Framework
  • 他可以解释IL
  • 代码的IL是包含在.NET的 Assembly里面
  • 浏览器之所以可以执行mono,是因为他接受到的mono版本是使用一种类似汇编(Aeesmbly)的低级语言编写的。而浏览器可以理解这种语言,他就是WebAssmbly
  • 然后,Mono就会把你的Assembly里面的代码(包含着Cpmponents)解析成为WebAssembly。这样就可以在浏览器里面运行了。

5.客户关托管模型具有以下优点:

  • 没有.NET服务器端依赖项。应用在下载到客户端之后完全正常运行。
  • 工作服务器卸载到客户端。
  • 不需要ASP.NET Core Web服务器来管理应用程序。无服务器不是方案的可能(例如:通过CND提供应用);

6.客户端托管的缺点:

  • 应用程序限制为浏览器的功能。
  • 需要支持的客户端硬件和软件(例如:Web Assembly支持)
  • 下载大小较大,应用需要长时间加载。
  • .Net运行时和工具支不太成熟。例如:.NET Standard支持中存在限制。

7.服务器端宿主模型
002.2-NETCore3.x入门课堂笔记 - 图16

8.服务器端托管模型具有以下几个优点

  • 下载大小明显小于客户端应用,且应用加载速度更快。
  • 应用充分利用服务器功能,包括使用任何与.NET Core兼容的API
  • 服务器上的.NET Core用于运行应用程序,。因此现有的.NET工具(如调试)可按照预期方式工作。
  • 支持瘦客户端。
  • 应用程序的.NET/C#代码库(包括应用程序的组件代码)不会提供给客户端。

9.服务器托管的缺点:

  • 通常存在较高的延迟。
  • 不支持脱机。
  • 对于包含多个用户的应用程序而言,可伸缩非常困难。
  • 不可能无服务器部署方案。

第九课:Web API

1.ApiController Attribute

  • Attribute路由
  • 对Model自动验证
  • 推断绑定源
    • [FromBody]:从请求的body来的(如果写了ApiController可以不写这个,可以自动推算出来)
    • [FromFrom]:从表单提交
    • [FromRoute]:路由有路由参数 {departmentId}
    • [FromQuery]:QueryString中获取
    • [FormHeader]:请求头中获取
    • [FromServices]:从依赖服务中取出参数

第十课:gRPC——Protocol Buffer

1.为什么需要gRPC

  • 现如今微服务很流行,而微服务很有可能是使用不同语言进行构造的,而微服务之间需要相互通信,所以微服务必须在以下方面达成共识
    • 需要使用某种API
    • 数据格式
    • 错误的模式
  • 现在最流行的一种API风格可能是REST,他主要是通过HTTP协议来传输JSON数据。
  • 但是现在我们可以看看grpc,他来自Google,并且支持众多主流的语言,包括:Go,Dart,C#,C/C++,Node.js,Python等。

2.gRPC能解决那些问题?

  • 构件(WEB)API是挺麻烦的,因为构件API时我们得考虑:
    • 数据的格式是JSON/XML还是二进制的。
    • 断电地址以及GET还是POST等
    • 如何调用API以及异常的处理规则。
    • API的效率:一次调用读取多少数据?是否太多或者太少了?太少的话可能会导致多次API调用?
    • 延迟:
      • 扩展性:是否能支持成千上万个客户端
      • 负载均衡
      • 与其他语言的互操作性
      • 如何处理身份验证、监控、日志等。

3.什么是gRPC?

  • gRPC来自Google,他是一个开源的框架;他同时也是Cloud Native Computoin基金会(CNCF)的一部分,就像Decker和Kubernetes一样。
  • gRPC允许你为RPC(Remote Procedure Call)定义请求和相应,然后gRPC会帮你处理一切剩余的事情。
  • 他的速度快,执行效率高,基于HTTP/2构件,低延迟,支持流,与开发语言无关,并且可以很简单的插入身份认证、负载均衡、日志和监控等功能。

4.什么是RPC?

  • RPC是(Remote Procedure Call)远程过程调用。
  • 在客户端代码使用gRPC调用的时候,就像直接调用了服务端的一个函数一样。

5.RPC是啥?
002.2-NETCore3.x入门课堂笔记 - 图17
RPC他不是一个新的概念,很早他就出现了。但是他存在很多问题,而gRPC他是对PRC一种非常简洁的实现并且解决了很多RPC的问题。
002.2-NETCore3.x入门课堂笔记 - 图18

6.如何学习gPRC?

  • 首先,你得学习Protocal Buffer(简单来说,他可以用来定义消息和服务)
  • 然后,你只需要实现服务即可,剩余的gRPC代码将会自动为你生成。
  • .proto这个文件可以适用于十几种开发语言(包括服务端和客户端),并且他允许你使用同一个框架支持每秒百万级以上的RPC调用。
  • gRPC使用的是合约优先的API开发模式,他默认使用Protocal buggers(protobuf)作为接口设计语言(IDL),这个.protp文件包括2部分:
    • gRPC服务的定义
    • 服务端和客户端之间传递的信息

7.为什么使用ProtocalBuffers

  • 他和开发语言无关
  • 可以生成所有主流开发语言的代码
  • 数据是二进制格式的。串行话的效率高,Payload比较小
  • 也很使用传递大量的数据
  • 通过设定某些规格,使得API进化也很简单。

8.开发环境
002.2-NETCore3.x入门课堂笔记 - 图19

9.第一个例子
002.2-NETCore3.x入门课堂笔记 - 图20
002.2-NETCore3.x入门课堂笔记 - 图21
002.2-NETCore3.x入门课堂笔记 - 图22
002.2-NETCore3.x入门课堂笔记 - 图23
002.2-NETCore3.x入门课堂笔记 - 图24
002.2-NETCore3.x入门课堂笔记 - 图25
002.2-NETCore3.x入门课堂笔记 - 图26
002.2-NETCore3.x入门课堂笔记 - 图27
002.2-NETCore3.x入门课堂笔记 - 图28
002.2-NETCore3.x入门课堂笔记 - 图29
002.2-NETCore3.x入门课堂笔记 - 图30
002.2-NETCore3.x入门课堂笔记 - 图31
002.2-NETCore3.x入门课堂笔记 - 图32
002.2-NETCore3.x入门课堂笔记 - 图33

第十一课:gRPC in ASP.NET Core 3x

1.gRPC

  • Remote Procedure Call 远程过程调用
  • 性能好
  • Protocol Buffer,二进制的串行话格式,使用HTTP/2传输
  • 支持全双工流
  • 与语言和平台无关
  • 约定为先的开发模式(.proto文件)

第十二课:部署

1..NET Core部署方式

  • FDD:Framework-dependent
  • SCD:Self-contained

2.FDD
002.2-NETCore3.x入门课堂笔记 - 图34

  • 优点:
    • 无需配置服务器的操作系统
    • 部署的包很小
    • .NET Core是共享的
  • 缺点:
    • 只有在预先安装了.NET Core的情况下才能运行
    • 可能会有兼容性的问题。

3.ECD

  • 优点:
    • 可以对你使用的.NET Core版本进行单独隔离的控制
    • 应用程序100%可在目标系统运行
    • 不同.NET Core版本的应用可无干扰共存并运行。
  • 缺点:
    • 需要配置目标服务器操作系统
    1. 部署包比较大

上一篇

002.1-NET Core MVC 2.x 全面教程

下一篇

002.3-NET5零基础到精通实战全集