栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.net core/.net core 3.1/.Net 5笔记

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.net core/.net core 3.1/.Net 5笔记

#

.net/C#/.net core笔记

一 语法

1.命名:
Fetch/Download比get好
建议使用的单词:
send/deliver/dispatch/announce(宣布)/distribute(分配)/route(路由)
find/search/extract(抽出)/locate/recover
start/launch/create/begin/open
make/create/setup/build/generate/compose
add/new
args/seq/arr/list/registers/text/item
hasMore/hasNext
使用具体的名字来描述:ServerCanStart()比CanListenOnPort好
给变量带上重要细节:表示毫秒_ms,表示未处理raw_
if(不断变化的值 < 固定值)
ConditionalAttribute 代替#if #endif
2.Limq本质:Lambda表达式和扩展方法。
Lambda表达式本质:匿名方法。
扩展方法:由参数调用方法,不用声明对象,因为类和方法都是静态的。
3.集合类的选用:
HashSet:不重复
SortedSet:排序且不重复
Queue:先入先出
Stack:后入先出
Hashtable:哈希表键值对,不支持泛型,多线程推荐使用
LinkedList:频繁插入或删除,把XX元素移到第XX位时
SortedList:排序;排好序的键值对,查找数据极快,但添加新元素,删除元素较慢
Dictionary:不排序;通过键来检索值的速度快,接近于 O(1),支持泛型,单线程使用
SortedDictionary:排序;查找,添加,删除速度都比较平均
4.IOC:
1.解耦 2.屏蔽细节。DI依赖注入,是实现IOC的手段。DI:构造对象,能自动把依赖的对象生成并传入,支持递归无限级的。 IOC是目标,DI是手段。
5.默认字段:
初始化优于赋值语句:值类型初始化为0,引用类型初始化为null
##6.非托管资源与非托管资源
非托管资源:I/O流,数据库连接,Socket连接,窗口句柄 – 人工控制
托管资源:“对象在堆中的内存”
7.泛型的类型参数约束
- where T : struct | T必须是一个结构类型
- where T : class | T必须是一个class类型
- where T : new() | T必须有一个无参构造函数
- where T : BaseService | T 必须继承了BaseService
- where T : IService | T必须实现IService
8.为什么要自定义异常类
a.没有具体系统异常相对应
b.不希望再catch块中处理
c.希望明确标识出错误种类的异常
##9.快捷产生字符
产生8个’#’
new string('#', 8)

产生1到10个数字
new List(Enumerable.Range(1, 10))

二 .net core

.net core生命周期:
AddTransient //瞬时生命周期
AddSingleton //单例:全程唯一实例
AddScoped //作用域单例,一个请求一个实例
没有线程单例,不建议太多单例,多个线程对单例操作,线程不安全。
适合单例:配置文件、容器实例、连接池、线程池
大部分是瞬时生命周期
6.AOP异常:
三种方法:1.直接用特性 2.用内置的ServiceFilter 3.全局注册AddControllersWithViews

什么时候用Scope?
请求单例:一次Http请求就是一个实例,一次请求创建一个容器实例
##浏览器向服务器请求的数据有:
1. QueryString字符串
2. Form
3. Cookie
4. Session
5. Header
Get/Put/Post/Delete

get:数据获取 | put:数据的插入 | post:数据更新 | delete:数据删除 

用swagger时,必须有访问方式
EntityFrameworkCore安装包:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Pomelo.EntityFrameworkCore.MySql

DbFirst

设为启动项目->程序包管理控制台->默认项目->输入(MySql):  Scaffold-DbContext -Force -OutputDir Entity -ContextDir Context -Context CimdbContext  "server=127.0.0.1;user id=root;database=cimdb;password=itc123!@#" -Provider "Pomelo.EntityFrameworkCore.MySql"

命令参数作用
OutputDir实体文件所存放的文件目录
ContextDirDbContext文件存放的目录
ContextDbContext文件名
Schemas需要生成实体数据的数据表所在模式
Tables需要生成实体数据的数据表的集合
UseDatabaseNames直接使用数据库中的表名和列名(某些版本不支持)
Force强制执行,重写已经存在的实体文件

Code First

//
[AllowAnonymous]跳过授权校验

Token校验
User <—> Authorization(返回Token)
User <—> Api(带着Token访问)
User <—> Third Party(带着Token访问,第三方Api)

Token的有效性,通过加密解密完成

微服务架构
SOA:总线,中介者模式
微服务:门面模式

进程间通信

//
1.共享存储Redis,DB,Queue,硬盘文件
2.服务通信WebService,WCF,WebApi,ashx/aspx
3.RPC.Net平台独有

鉴权授权
第一步:在app.UseRouting()之后、app.UseEndpoints之前增加鉴权授权;

//
鉴权检测用户是否登录
授权检测有没有权限,是否能访问后续的页面功能

第二步:在ConfigureServices中增加
第三步:指定哪些Action需要做鉴权授权[Authorize]
鉴权授权 identity server4与.net core融合比较好
User (登录请求)-> Authorization
<- 返回token
Gateway识别并解析token
即由identity server4发放token带到httpcontext中,由Gatewa识别解析token
角色授权
不同的用户不同角色,做不同拦截。
中间件
什么时候需要用到中间件?身份验证,Session存储,日志记录等
集群
服务实例必须集群/负载均衡:多台服务器做相同的事,共同承载压力(高可用,可伸缩)(比如应对服务器挂了)
Nginx:单纯是负载均衡,不够用
1.增加/减少服务实例,动态增减,要重启Nginx,服务注册与发现不智能
2.健康检查(微服务实例代码小于2000行),如遇到网络断网,即时发现问题,下线
分布式
一个进程做的事,分成多个进程协作完成
集群与分布式区别
集群:多台服务器做相同的事,属于均摊关系
分布式:一个进程做的事,分成多个进程协作完成。一个事情分成多个步骤,协作完成(狭义理解:串行)
Consul
服务启动时注册-Consul-调用者调用
|Health check|
网关Gateway

作用:更换ip、端口、更新程序时
1.提供统一服务入口
2.聚合后台服务,节省流量,提升性能
3.提供安全,过滤,流控等API管理功能

服务治理:
缓存:共享缓存
熔断:服务挂了,请求还不断,即时通知。单位时间内异常多少次,网关返回失败
限流:单位时间内流量只允许多少次,多了排队
降级:特殊情况,可以降低服务等级,甚至关闭

瞬态故障处理 Polly(调用失败,重试)
一种.NET弹性和瞬态故障处理库,允许以非常顺畅和线程安全的方式来执行重试、短路、超时、故障恢复等策略

分布式追踪Skywalking Skyapm-首选
分布式追踪和APM的server端,它将包含Collector,Storage,独立的WebUI,并使用OpenTracing规范来设计追踪数据(分配一个Guid,统计在各个环节流程的信息)
Exceptionless-首选
开源的日志收集和分析框架,能为应用程序提供实时错误、特性和日志报告
Apollo统一配置中心-首屈一指
Apollo:配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。(集中的配置中心,不同集群不同环境可以配置推送)
分布式事务
CAP,分布式锁
任何分布式系统只可同时满足C一致性、A可用性、P分区容错性中的两点,没法三者兼顾。满足可用性、最终一致性。实现最终一致性三种模式:
1.可靠事件模式 2.业务补偿模式 3.TCC模式
容器化
docker:实质是进程,里面是沙箱(包含环境和程序)。快速启动实例
K8S容器编排:把容器当资源,说明书,管理docker进程、资源、docker的关系。docker是宿舍,K8S是宿舍阿姨
CI/CD 持续集成持续发布
Jenkins:开源的、提供友好操作界面的持续继承工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。(提交代码后,构建测试、发布)

启动微服务命令
dotnet BBSWeb.dll --urls=“http://*:5002” --ip=“127.0.0.1”–port=5002

集群和服务注册发现
string url = “http://localhost:5000/aip/user/all”
string content = InvokeApi(url);

    public static string InvokeApi(string url)
    {
        using (HttpClient httpClient = new HttpClient())
        {
            HttpRequestMessage message = new HttpRequestMessage();
            message.Method = HttpMethod.Get;
            message.RequestUri = new Uri(url);
            var result = httpClient.SendAsync(message).Result;
            string content = result.Content.ReadAsStringAsync().Result;
            return content;
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号