Fork me on GitHub

02 2022 档案

摘要:在自定义EventSource时,可以使用四种EventCounter: EventCounter:统计指标收集器,比如平均值,最大值,最小值 PollingCounter:自定义统计指标收集器,通过自定义统计方法的方式实现对指标的统计 IncrementingEventCounter:累加指标收集 阅读全文
posted @ 2022-02-23 14:24 桂素伟 阅读(31) 评论(0) 推荐(0) 编辑
摘要:在自定义EventSource时,可以使用四种EventCounter: EventCounter:统计指标收集器,比如平均值,最大值,最小值 PollingCounter:自定义统计指标收集器,通过自定义统计方法的方式实现对指标的统计 IncrementingEventCounter:累加指标收集 阅读全文
posted @ 2022-02-23 14:17 桂素伟 阅读(30) 评论(0) 推荐(0) 编辑
摘要:在自定义EventSource时,可以使用四种EventCounter: EventCounter:统计指标收集器,比如平均值,最大值,最小值 PollingCounter:自定义统计指标收集器,通过自定义统计方法的方式实现对指标的统计 IncrementingEventCounter:累加指标收集 阅读全文
posted @ 2022-02-23 14:07 桂素伟 阅读(38) 评论(0) 推荐(0) 编辑
摘要:之前的Counters都是系统内置的,我们只需在进程外,或进程内采集,然后交给专门的展示指标工具即可。本篇说一下自定义EventSource,来采集自己业务中,或自己产品中的指标收集方式。 自定义EventSource是以EventCounters作为核心,EventCounters的作用是实时自动 阅读全文
posted @ 2022-02-23 14:00 桂素伟 阅读(107) 评论(0) 推荐(0) 编辑
摘要:下面这段代码就是把ascll为0到127值 ,转成string,并判断在字符串中的位置,第5,6行代码分别用了两种IndexOf方法的重载。 for (var i = 0; i < 128; i++) { var str1 = ((char)i).ToString(); var str2 = $" 阅读全文
posted @ 2022-02-21 17:37 桂素伟 阅读(77) 评论(0) 推荐(0) 编辑
摘要:通过dotnet-counter moniter可以在应用外部启动监控应用,当然也可以在进程内来来进行监控指标的收集或展示。 进程内监控的好处是不用启用多个服务来完成监控和服务的分离,只要应用启动,监控指标也就产生,是紧密关系。 class Program { static void Main() 阅读全文
posted @ 2022-02-21 17:29 桂素伟 阅读(69) 评论(0) 推荐(0) 编辑
摘要:本篇分别说明一下System.Net下的Http计数器,NameResolution计数器,Security计数器和Sockets计数器。 同时,下面指标各项()里的项目是--counters 参数[]里的项,用逗号分隔多项指标。 System.Net.Http计数器 以下计数器由 HTTP 堆栈发 阅读全文
posted @ 2022-02-11 17:33 桂素伟 阅读(75) 评论(0) 推荐(0) 编辑
摘要:上篇说了System.Runtime,它负责应用运行的环境资源的收集,这篇要继续说AspNetCore的Hosting,Http.Connections和Server.Kestrel三个计数器。 同时,下面指标各项()里的项目是--counters 参数[]里的项,用逗号分隔多项指标。 Micros 阅读全文
posted @ 2022-02-11 16:48 桂素伟 阅读(92) 评论(0) 推荐(0) 编辑
摘要:在dotnet中,常用的收集指标有: System.Runtime 计数器 Microsoft.AspNetCore.Hosting计数器 Microsoft.AspNetCore.Http.Connections计数器 Microsoft-AspNetCore-Server-Kestrel计数器 阅读全文
posted @ 2022-02-11 16:33 桂素伟 阅读(204) 评论(0) 推荐(1) 编辑
摘要:打造一个完善的软件产品,准确完整实现业务是第一步,再有就是有优秀的性能,稳定的运行。为了能量化性能指标,需要利用工具,来收集这些数据,以便对产品作出代码级调整。 先说一下.net中带一个全局工具:dotnet-counters,它是一个性能监视工具,用于临时运行监视和初级性能调查。它可以对运行中的d 阅读全文
posted @ 2022-02-11 16:30 桂素伟 阅读(109) 评论(0) 推荐(1) 编辑
摘要:asp.net core后期的版本支持在依赖注入时,一个接口,多个子类实现,依次注入,当需要使用实例时,可以用IEnumerable<接口>来获取实例,进行使用,这种使用方式如下: 接口和子类的定义: using System; using System.Collections.Generic; u 阅读全文
posted @ 2022-02-11 16:02 桂素伟 阅读(124) 评论(0) 推荐(0) 编辑
摘要:本篇介绍在C#中,把一个大集合,或大数组分成若干个区来执行。Demo中是把一组字符串放在list中,然后并行生成MD5串,返回回来。 using System; using System.Collections.Generic; using System.Reflection; using Syst 阅读全文
posted @ 2022-02-11 15:55 桂素伟 阅读(235) 评论(0) 推荐(0) 编辑
摘要:在C#中,并行Parallel和异步Async,都是有来提升应用性能,那看看Parallel的性能怎么样。 Demo是对1百万的数组进行赋值运算,用Benchmark进行测试,调用方式:BenchmarkRunner.Run<TestParallelDemo>(); public class Tes 阅读全文
posted @ 2022-02-11 15:36 桂素伟 阅读(80) 评论(0) 推荐(0) 编辑
摘要:异步能在一定场景中带性能的飞跃,同步调用性能,也以带来时间的节省。 先看一下被调用的api: using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collecti 阅读全文
posted @ 2022-02-11 15:30 桂素伟 阅读(74) 评论(0) 推荐(0) 编辑
摘要:在前面的文章中看了Property的几种不同访问方式《用BenchmarkDotNet看Property》,性能调用上的差别明显,那同样作为class里重要成员,Method性能如何呢? 下面是被测试方法 public class MyClass { public string MyMethod() 阅读全文
posted @ 2022-02-08 20:33 桂素伟 阅读(17) 评论(0) 推荐(0) 编辑
摘要:为了提高性能,需要对mysql批量插入进行一次性对对比,下面是测试完后的结果,存档以备后查。 1. 测试结果 记录条数 循环插入,一个事务提交insert00(ms) 批量函数插入 insert01(ms) 一个inser多个values insert02 (ms) 多个insert拼接 inser 阅读全文
posted @ 2022-02-08 20:32 桂素伟 阅读(167) 评论(0) 推荐(0) 编辑
摘要:异步流是C#8.0出来的特性,可以让流式数据以尽快分批的方式返回,而不像之前那样,当全部获取到数据后,再返回。 下面的例子的场景有点特殊,查询一个较多的数据,为了查询不给数据带来很大压力,做成一个分批从数据查询回数据,组装成一个整理List返回。 如果是之前的做法,就需要等所有的数据返回后,累加到一 阅读全文
posted @ 2022-02-08 20:21 桂素伟 阅读(31) 评论(0) 推荐(0) 编辑
摘要:属性——Property,由get,set访问器组成,这是C#使用度比较高的类成员。今天分几组对比测试,来看一下使用Property的性能。 被测试对象: public class MyClass { private string _myProperty1 = DateTime.Now.ToStri 阅读全文
posted @ 2022-02-07 20:36 桂素伟 阅读(73) 评论(0) 推荐(0) 编辑
摘要:BenchmarkDotNet是一款开源的性能测试工具,使用方式非常简单,特别是对实现同一功能的两种方式,犹豫不决时,可以使用它进行个对比。 比如我们比较ADO.NET方式查询数据库表,和用Dapper方式获取数据为表,只需要在两个方法上增加 [Benchmark]就可以了,然后调用var summ 阅读全文
posted @ 2022-02-07 20:23 桂素伟 阅读(98) 评论(0) 推荐(0) 编辑
摘要:C#里,foreach可以算是个高一等级的循环,因为想要使用foreach必须实现IEnumberable,然后还需要在这个接口的唯一方法中,用yield return返回元素,才能达到foreach的循环效果。 class MyList : IEnumerable { string[] arr = 阅读全文
posted @ 2022-02-07 20:20 桂素伟 阅读(34) 评论(0) 推荐(0) 编辑
摘要:using和IDisposable是组合使用的,像这种一个关键字和一个接口的组合,在C#中很少见的,using这个关键字,也就因为IDisposable多了一个身份。 其实很多人都知道IDisposable,有一个方法void Dispose(),通常是用来释放一些必须释放的资源时,要实现这个接口, 阅读全文
posted @ 2022-02-05 15:39 桂素伟 阅读(71) 评论(0) 推荐(0) 编辑
摘要:Moq在.net中比较出名的mock框架,NSubstitute也是属于这类框架,使用方式也如出一辙,是通过实现子类来达到mock的效果。下面的测试方法都是按照 UnitTest的三板斧Arrange Act Assert来展开的,代码具体如下。 using Microsoft.VisualBasi 阅读全文
posted @ 2022-02-05 15:35 桂素伟 阅读(56) 评论(0) 推荐(0) 编辑
摘要:创建一个控制台项目,.net5或.net6(Preview),在Program.cs中写如下代码,F5,能顺利跑起来,没有Program类,没有Main函数。 这是C#9带来的顶级语句的功能。 System.Console.WriteLine("你好,C#"); 其实这里的Program类和Main 阅读全文
posted @ 2022-02-05 15:31 桂素伟 阅读(86) 评论(0) 推荐(0) 编辑
摘要:如果想在一个项目中,用DapperPlus支持多种数据库该怎么做? 在《让Dapper支持Mock》中我们定义了DapperPlus,可以基于这个类,实现两个子类:MySqlDapperPlus,MsSqlDapperPls,在这两个子类的构造中适配对应的数据库类型,从注放容器中,获取IDbConn 阅读全文
posted @ 2022-02-05 15:26 桂素伟 阅读(40) 评论(0) 推荐(0) 编辑
摘要:在上一篇说了封闭Dapper扩展方法为一个接口来支持Mock,接下来看看如何实现读写分离。 其实定义两个接口,一个用来实现读,一个用来实现写。在读的接口里只有Query的方法,在写的接口里实现Query和Execute全量(通读写的库也是支持读的,有的场景还是必须在写库里读,因为写库往读库中同步时是 阅读全文
posted @ 2022-02-05 15:20 桂素伟 阅读(82) 评论(0) 推荐(0) 编辑
摘要:Dapper,在.net的ORM中占有一席之地,用法简单,灵活,使用如下。但也带来一个问题,就是在单元测试时,Mock比较难办。 public List<Goods> GetAllGoods() { using var con = new SqlConnection(); var sql = "se 阅读全文
posted @ 2022-02-05 15:14 桂素伟 阅读(78) 评论(0) 推荐(0) 编辑
摘要:我们知道,在c#中,如果两个类型没有继承关系 ,是不能相互值赋的,但有两个关键字implicit和explicit,可以让 Date date = DateTime.Now这样的赋值成为可能。 注:c#是没有Date类型的,但DateTime有Date属性 DateTime.Date,但这个属性本质 阅读全文
posted @ 2022-02-05 15:10 桂素伟 阅读(37) 评论(0) 推荐(0) 编辑
摘要:当我们用nuget引用三方库时,在类型,或类型成员上会有注释,如下图,是MySql官方包,command的ExecuteNonQuery的注释 我们自己写一个类库项目CommentsLibrary,给类,构造函数,方法添加xml注释,然后生成 using System; namespace Comm 阅读全文
posted @ 2022-02-05 15:02 桂素伟 阅读(31) 评论(0) 推荐(0) 编辑
摘要:前情提要:因为项目特点,需要在自己的服务器上集成测试,而不是用github的DevOpt体系;再有就是服务器是windows的;项目仓库在github上;并且项目是asp.net core的项目;开发人员一枚。以前的做法就是发布后,把执行码复制在服务器上启动;后来就是在服务器写了个bat,运行bat 阅读全文
posted @ 2022-02-05 14:55 桂素伟 阅读(42) 评论(0) 推荐(0) 编辑
摘要:在使用visual studio开发过程中,有时发现在“错误列表”中的一些提示,大体分为错误、警告、消息,错误是我们必须处理的,否则代码通过编译,警告有时常常会被忽略(也许你是细心人,会处理掉),有时,这样的忽略会为应用埋下安全的隐患。 其实这些提示,是来自微软的IDE的Security Code 阅读全文
posted @ 2022-02-05 14:49 桂素伟 阅读(192) 评论(0) 推荐(0) 编辑
摘要:大部分主流语言都支持web框架,并且实现起来相对轻便,简捷,比如: go的gin包 package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.C 阅读全文
posted @ 2022-02-04 17:06 桂素伟 阅读(104) 评论(0) 推荐(0) 编辑
摘要:随着撸码的时间增加,码感也会加强,今天看一个编码直觉案例吧! 案例: 需求:把查询到的数据列表生成csv文件 nuget包:CsvHelper 数据实体类: /// <summary> /// 商品 /// </summary> public class Goods { /// <summary> 阅读全文
posted @ 2022-02-04 17:01 桂素伟 阅读(98) 评论(0) 推荐(0) 编辑
摘要:new new用三种场景,最常用的实例化,泛型参数时的实例化约束,第三种是显式隐藏继承成员。 using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text 阅读全文
posted @ 2022-02-04 16:56 桂素伟 阅读(25) 评论(0) 推荐(0) 编辑
摘要:本例使用的规则引擎包是RulesEngine,关于RulesEngine的介绍,请自行补充,这里只是一个极简单使用场景。 例子大体就是用户有一些优惠券,系统会根据用户订单情况,筛选可以使用的优惠券供用户选择,用户选择后会计算出优惠后金额。 代码相对简单,就不一一介绍了,奉上service中的代码: 阅读全文
posted @ 2022-02-04 16:50 桂素伟 阅读(111) 评论(0) 推荐(0) 编辑
摘要:winform是一老技术,感觉都有点掉牙了(我近20年前就是从winform开始接触.net的);blazor,是微软技术圈里的新宠,正在被悉心照顾。当这一老一少的技术碰撞后,会有什么火花? .net v6.0.0-preview.3,给winform和blazor结合带来了前提。https://g 阅读全文
posted @ 2022-02-04 16:45 桂素伟 阅读(531) 评论(0) 推荐(0) 编辑
摘要:.net v6.0.0-preview.3的HotReload我是极喜欢的,因为之前有这样的需求——状态不丢,上下文不丢。 为了验证,安装完.net 6 preview 3后,新建一个webapi项目,写了如下简单代码: using Microsoft.AspNetCore.Mvc; using M 阅读全文
posted @ 2022-02-04 16:39 桂素伟 阅读(56) 评论(0) 推荐(0) 编辑
摘要:友情提示:这篇有点长,有点绕,加油! 上一篇文章,简单的说明了一下.net项目模板的创建,主要是通过在项目文件*.csproj同目录下添加.template.config文件夹和里面的template.json,再用dotnet new -i来安装项目模板的,本篇继续深入。 首先定个小目标: 实现一 阅读全文
posted @ 2022-02-04 16:11 桂素伟 阅读(68) 评论(0) 推荐(0) 编辑
摘要:你有没有这样的感觉,开启一个新项目时,总是做一堆体力活——项目的结构层次,常用日志库,OpenAPI库,ORM库,的引入,权限认证方式选择添加,配置文件重新归置存放等等。公共框架的部分总是不变的,如果有个常用项目的模板就好了,可以一键创建,接下来直接写业务就ok了。 这种场景还适合一些公司对源码,项 阅读全文
posted @ 2022-02-04 16:04 桂素伟 阅读(185) 评论(0) 推荐(0) 编辑
摘要:相信大家都受益过nuget.org,上面的海量的库、工具、模板为我们开发提供了极大的帮助,其中有很多都是非常宽松的开源协议,在此感谢那无私奉献的人 有的时候,在企业内部,有些库是私有的,专项的,要求非公开,另一方面需要公司内部开发人员共享这些库,这时就要搭建一个私用的NuGet仓库了。 BaGet就 阅读全文
posted @ 2022-02-04 15:58 桂素伟 阅读(82) 评论(0) 推荐(0) 编辑
摘要:FluentValidation在asp.net core中怎么使用?先安装包。 Install-Package FluentValidation.AspNetCore 和上一篇的实体类和验证类一样。 实体类: public class Person { public int Id { get; s 阅读全文
posted @ 2022-02-04 15:50 桂素伟 阅读(52) 评论(0) 推荐(0) 编辑
摘要:把数据错误扼杀在早期,那就是在数据的入口处,一般数据都是打包成一个实体的方式进传递,FluentValidation就以实体类为单位进行属性验证的集合。 Install-Package FluentValidation 下面看一个例子吧。 实体类: public class Person { pub 阅读全文
posted @ 2022-02-04 15:44 桂素伟 阅读(90) 评论(0) 推荐(0) 编辑
摘要:从前,用asp.net core写了一个给客户发交易明细的应用,每天发一次,因为是csv格式,当时用的是StringBuilder来一行一行组装数据,组装完后,EMali或SFTP给客户。 后来,为节省服务器资源,需要把服务从windows server迁移到Linux上,经过反复测试,都没有发现B 阅读全文
posted @ 2022-02-04 09:31 桂素伟 阅读(655) 评论(0) 推荐(0) 编辑
摘要:string string是常用的类型,它具有不可变性:就是一旦赋值,就不可变,如果再赋值 ,就重新开辟内存空间;保留性:如果一个字符串存在,另一个与其相同,他们会指向同一个地址,不会再开辟新内存空间; 下面的Demo作个证明: public unsafe void Run() { string a 阅读全文
posted @ 2022-02-04 09:27 桂素伟 阅读(183) 评论(0) 推荐(0) 编辑
摘要:首先声明,Bogus是一个Nuget包的名称,Faker是它内部的一个类,这个库的作用就是模拟生成实体类的数据,特别适合测试时的场景,不用苦思冥想,辛辛苦苦来造不同的实体类了。当然,造出来的都是虚假的(Bogus),骗人的(Faker)。它家在这里:https://github.com/bchave 阅读全文
posted @ 2022-02-04 09:24 桂素伟 阅读(398) 评论(0) 推荐(0) 编辑
摘要:OneOf——其中之一,这是一个泛型类,意思就是这里泛型中的任何一个类都可以,还是看代码吧。 引入包 install-package OneOf 实现一个产品查询,有三种情况,查询到返回;查询不到;查询出错。 [ApiController] [Route("[controller]")] publi 阅读全文
posted @ 2022-02-04 09:18 桂素伟 阅读(40) 评论(0) 推荐(0) 编辑
摘要:csrobot为开发提高效率,增加乐趣! https://github.com/axzxs2001/CSRobot 安装命令: dotnet tool install --global CSRobot --version 0.0.4 Nuget地址:https://www.nuget.org/pac 阅读全文
posted @ 2022-02-04 09:16 桂素伟 阅读(55) 评论(0) 推荐(0) 编辑
摘要:下面的数据库类型和c#类型的映射关系,只是我个人的想法,应该不同的业务场景对应可能不一样,比如json,xml,line,polygon结构化的数据,如果在C#中有对应的实体类,可以很友好的转换,如果没有,可以用现有的类型存储,再作转换,比如json,xml都可以用string来接收。 mysql字 阅读全文
posted @ 2022-02-04 09:11 桂素伟 阅读(62) 评论(0) 推荐(0) 编辑
摘要:CSRobot的gen命令,有一个参数--map,是指数据库字段类型到实体类型映射,本例是sql server到csharp的类型映射: SQL Server C# bigint Int64 binary Byte[] bit Boolean char String,Char[] date Date 阅读全文
posted @ 2022-02-04 09:08 桂素伟 阅读(36) 评论(0) 推荐(0) 编辑
摘要:CSRobot https://github.com/axzxs2001/CSRobot gen命令是用来从数据库,生成实体类,前一篇文章说到要实现两个接口,其中一个是从数据库中查询出库,表,字段的信息,转成实体类。 首先说一下gen命令的属性 csrobot gen [options] 命令参数选 阅读全文
posted @ 2022-02-04 08:30 桂素伟 阅读(177) 评论(0) 推荐(0) 编辑
摘要:写代码很久了了,时不时想把这些年学到的,用到的,或自己感悟到的,汇总一下,形成一个东西,或资料,或工具。但每当开始时就一片空白,总是觉得这些大家都会,这些只是自己片面的观点,这些拿不出手…… 转念又想,再不写就更老了,再说社区的力量是伟大的,在写的过程中,可以集大家之思想,来完善,优化。 所以,在这 阅读全文
posted @ 2022-02-04 08:23 桂素伟 阅读(36) 评论(0) 推荐(0) 编辑
摘要:应用是演进的,通常我们用版本号来管理。api也是演进的,这篇博文就说说asp.net web api演进时的版本管理。 asp.net web api的版本管理是通过微软的一个包来实现的。 Install-Package Microsoft.AspNetCore.Mvc.Versioning 通过u 阅读全文
posted @ 2022-02-04 08:18 桂素伟 阅读(31) 评论(0) 推荐(0) 编辑
摘要:dotnet tool对应的工具,本质上是一个控制台应用,在调用这个应用时,会根据传入的参数,执行应用内部的逻辑。 关于dotnet tool命令使用,参照https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-tool-install 下 阅读全文
posted @ 2022-02-03 14:05 桂素伟 阅读(127) 评论(0) 推荐(0) 编辑
摘要:在.net core发布之初,dotnet cli就诞生了,dotnet cli的作用是什么呢?主要是用来创建,还原,构建,发布,测试等一系统管理功能,本来,visual studio中是有这些功能的,那为什么还另外再提供一套呢? 【注:其实在windows下的.net应用,也是可以通命令行来实现一 阅读全文
posted @ 2022-02-03 13:53 桂素伟 阅读(71) 评论(0) 推荐(0) 编辑
摘要:Union就是把不相干的一些数据实体,合并起来,一起供外部查询。不用像webapi,完成查询不同的数据,需要多次请求。一次请求,获取多样数据,减少请求次数,这也是GraphQL的优势之一。怎么弄,来来来,代码看过来: using HotChocolate; using HotChocolate.Ex 阅读全文
posted @ 2022-02-03 13:49 桂素伟 阅读(51) 评论(0) 推荐(0) 编辑
摘要:向对象的继承,是个好东西;GraphQL也是个好东西;怎么能有机的结合起来,发挥彼此的能量?Hot Chocklate实现了.net和GraphQL的灵活组合,一起来看看,这是接口和子类的实现: class Program { static void Main(string[] args) { In 阅读全文
posted @ 2022-02-03 13:47 桂素伟 阅读(65) 评论(1) 推荐(0) 编辑
摘要:越权 越权是非常严重的安全漏洞,通常状态是开发人员对请求的限制逻辑不严格导致的。 如果系统中有角色的概念,越权可能出现不同角色间的越权和同角色间的越权。 相同角色: A用户,B用户是相同的角色。 A用户和B用户都可以调用 /photo/{id}。 这个url,如果在后端不判断这个phtoto的id属 阅读全文
posted @ 2022-02-03 13:37 桂素伟 阅读(52) 评论(0) 推荐(0) 编辑
摘要:上传文件 上传文件是造成风险的很大因素,所以对上传文件进行处理是重要的,首先要处理的是:a、上传文件大小限制;b、上传文件类型(能过扩展或,或文件头)限制;c、上传的名称要替换掉;d、上传的文件要在专用区域(如果能设置权限最好)最好。 [HttpPost("/files")] public asyn 阅读全文
posted @ 2022-02-03 13:35 桂素伟 阅读(37) 评论(0) 推荐(0) 编辑
摘要:隐藏web服务端信息 创建一个asp.net core mcv web项目,运行,F12查看返回信息,如下图,会清晰看到服务端的类型是kestrel. 有时安全检测要求不能显示服务端信息,这样在一定程度上能降低被 攻击的风险,具体代码如下: public class Program { public 阅读全文
posted @ 2022-02-03 13:28 桂素伟 阅读(44) 评论(0) 推荐(0) 编辑
摘要:web应用相对desktop应用就要复杂一些,桌面应在一个时间点是为单访问服务,web应用,在一个时间点,设计的是为多人服务;桌面应用UI和后面代码是一体的,在一台设备上动行表示,但web服务,通常是前后端分离,后端很多时候还是很多个服务协同工作,所以web服务就要复杂一些。 web框架 这里说的w 阅读全文
posted @ 2022-02-02 23:10 桂素伟 阅读(51) 评论(0) 推荐(0) 编辑
摘要:使用了AspNetCoreRateLimit三方库,starup.cs配置如下。 using AspNetCoreRateLimit; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Micr 阅读全文
posted @ 2022-02-02 23:07 桂素伟 阅读(65) 评论(0) 推荐(0) 编辑
摘要:写程序和拼积木是一样的,首先要知道我们这堆积木中都有那些基本模块,然后再非常清晰知道自己这次要拼一个什么东西,那接下来就是拼搭环节,在拼搭过程中,有时还会拆除,重新来搭。 其实开发软件也是一样的,这篇先理一下desktop框架下“搭积木”的思路。 desktop框架:desktop在.net世界里面 阅读全文
posted @ 2022-02-02 23:00 桂素伟 阅读(341) 评论(0) 推荐(0) 编辑
摘要:高层模块不应该依赖底层模块,两都都应该依赖抽象 一个三层的Demo /// <summary> /// 人员实体类 /// </summary> class Person { public int ID { get; set; } public string Name { get; set; } p 阅读全文
posted @ 2022-02-02 20:36 桂素伟 阅读(10) 评论(0) 推荐(0) 编辑
摘要:对修改是封闭的,对扩展是开放的。 新需求对于已上线的系统是司空见惯的,最佳实践告诉我们对生产中的代码在扩展功能时不要直接修改,而是去重写一个新的方法,新类型或新服务去扩展它,这道理很简单,任何即有代码的变更,都可能带来灾难。(除非100%把握,或有100%把握的胆子,当然也有一个工种,测试能帮我们来 阅读全文
posted @ 2022-02-02 20:32 桂素伟 阅读(28) 评论(0) 推荐(0) 编辑
摘要:最近工作需要,在调研BMP产品(开源和商用),重点了解了activiti和它的商业产品Alfresco Process Services,这是java的体系,成熟,完善(三方开源库是java多年开源积累下的最宝贵的财富),出身.neter的我自然就想看看.net世界里有没有类似的产品。于是就找到两篇 阅读全文
posted @ 2022-02-02 20:28 桂素伟 阅读(224) 评论(0) 推荐(0) 编辑
摘要:单一职责是降低耦合度的指导思想,适用于一个微服务,一个类型,一个方法。 微服务层: 微服务一般按业务的领域来进行拆分:药房微服务就是药房的业务,护士站微服务就是护士站的业务,广义上没有什么问题,但对于一些共用业务,就犯难了,究竟放在那个微服务里?还是合并两个微服务?其实这里就单一,把共用的抽离出来, 阅读全文
posted @ 2022-02-02 20:24 桂素伟 阅读(25) 评论(0) 推荐(0) 编辑
摘要:官方和老人言,asp.net core中尽量用异步,为什么呢?接下来是个小demo,看看同步异步的差别吧,或许通过这个demo,就明白官方和老人的良苦用心了。 1、创建一个sql server的表 CREATE TABLE [dbo].[Students]( [StuNo] [varchar](50 阅读全文
posted @ 2022-02-02 20:10 桂素伟 阅读(52) 评论(0) 推荐(0) 编辑
摘要:Jaeger是收集全链路跟踪的信息,在Jaeger收集的信息中,有请求的url信息,有每个请求的时间间隔,借助这些信息可以进行报警,比如一次较长的请求,或者是某些请求的次数和先后等。不管报警的业务规则是什么,首先得收集Jaeger中的信息。 Jaeger有api可以提供这些信息,比如 /api/se 阅读全文
posted @ 2022-02-02 20:03 桂素伟 阅读(38) 评论(0) 推荐(0) 编辑
摘要:上一篇定义了两种使用Jaeger的方式:中间件和action过滤器,下面这个例子定义了两个服务 WebAPI01,请求WebAPI02,采用的是中间件的请求方式。 引入JaegerSharp包(或发布到自己的Nuget库里引用) WebAPI01的Startup using JaegerSharp; 阅读全文
posted @ 2022-02-02 19:58 桂素伟 阅读(73) 评论(0) 推荐(0) 编辑
摘要:随着微服务的普及,微服务间的调用全链路跟踪也火了起来,Jaeger(https://www.jaegertracing.io/)是CNCF孵化的全链路跟踪型项目,在.net core中,提供了一个Jaeger的Nuget(https://github.com/jaegertracing/jaeger 阅读全文
posted @ 2022-02-02 19:53 桂素伟 阅读(66) 评论(0) 推荐(0) 编辑
摘要:最近设计架构时,有个场景,首先是前后端分离,再就是一前端对多后端,这里需要解决两件事,一是前端的html,js,css需要一个host;二是需要一个api网关,能组织后端的api服务。有很多反向代理产品能实现,这里选择了Nginx来实现。 下面是在一个前端的html文件中调用后端api的例子,前端是 阅读全文
posted @ 2022-02-02 19:48 桂素伟 阅读(36) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:45 桂素伟 阅读(84) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:43 桂素伟 阅读(42) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:41 桂素伟 阅读(59) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:25 桂素伟 阅读(41) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:23 桂素伟 阅读(45) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:21 桂素伟 阅读(65) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:07 桂素伟 阅读(141) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 15:02 桂素伟 阅读(58) 评论(0) 推荐(0) 编辑
摘要:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。 ——出自 https 阅读全文
posted @ 2022-02-01 14:58 桂素伟 阅读(67) 评论(0) 推荐(0) 编辑
摘要:.net core下,一个轻量组反向代理库,由微软发起。 做了一个简单的带验证的反向代理,应用结构如上图,一个验证服务,两个业务服务和一个YARP服务。 源码 https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.Net 阅读全文
posted @ 2022-02-01 14:53 桂素伟 阅读(164) 评论(0) 推荐(0) 编辑
摘要:接上一篇博文,用Roslyn动态编译C#语句片段,情怀了一把,但内存会飙升,执行速度也奇慢,这条路走不通,回归正道,说起脚本,Lua是常用的手段之一,那就看看NLua怎么样,用NLua实现同样的效果,通过配置Lua脚本语言来实现,如下图,波澜不惊,同样是1000次执行,一点压力都没有,只有细微人内存 阅读全文
posted @ 2022-02-01 14:48 桂素伟 阅读(42) 评论(0) 推荐(0) 编辑
摘要:在一个项目中,需要轻量级用到脚本语言,来提高应用服务的灵活性。因为知道Roslyn可以动态编辑C#,本着情怀,就自然用Roslyn来处理这块业务了。开在windows上执行,一次调用风平浪静,因为这个功能使用频次不高,性能也没有太在意,上线后一切安好。事情发生在n天后,随着数据的增多,批量的数据上来 阅读全文
posted @ 2022-02-01 14:45 桂素伟 阅读(46) 评论(0) 推荐(0) 编辑