.NET Core

120行代码打造.netcore生产力工具-小而美的后台异步组件

妖精的绣舞 提交于 2020-08-16 02:45:27
相信绝大部分开发者都接触过用户注册的流程,通常情况下大概的流程如下所示: 接收用户提交注册信息 持久化注册信息(数据库+redis) 发送注册成功短信(邮件) 写操作日志(可选) 伪代码如下: public async Task<IActionResult> Reg([FromBody] User user) { _logger.LogInformation("持久化数据开始"); await Task.Delay(50); _logger.LogInformation("持久化结束"); _logger.LogInformation("发送短信开始"); await Task.Delay(100); _logger.LogInformation("发送短信结束"); _logger.LogInformation("操作日志开始"); await _logRepository.Insert(new Log { Txt = "注册日志" }); _logger.LogInformation("操作日志结束"); return Ok("注册成功"); } 在以上的代码中,我使用Task.Delay方法阻塞主线程,用以模拟实际场景中的执行耗时。以上流程应该是包含了绝大部分注册流程所需要的操作。对于任何开发者来讲,以上业务流程没任何难度,无非是顺序的执行各个流程的代码即可。

.NetCore学习笔记:五、MiniProfiler监控运行效率

本小妞迷上赌 提交于 2020-08-16 01:26:45
MiniProfiler是一个简单且高效的小型分析器,可用于.NET,Ruby,Go和Node.js. MiniProfiler不是将自己附加到每一个方法上,因为这样会有强侵入性而且也不是专注于分析性能问题。 它是一个ADO.NET的分析器,可以分析对于ADO.NET(SQL Server、Oracle等)、LINQ-to-SQL、EF(Code First&EF Core)的原始调用(如生成的sql语句)。 可编程式的分析器,通过在想要分析的步骤上加上step。 MiniProfiler官网:http://miniprofiler.com/ MiniProfiler开源地址:https://github.com/MiniProfiler/dotnet MiniProfiler在.NetCore中使用起来非常的方便,配置简单,下面我们就来看一下怎么配置: 1、在web项目中安装 MiniProfiler.AspNetCore.Mvc 程序包。 2、在Startup.cs的ConfigureServices中配置MiniProfiler,这里主要完成MiniProfiler的自定义配置(如路由,如果没有特殊要求默认即可。)和内部服务在容器中的注入。 1 public void ConfigureServices(IServiceCollection services) 2 { 3

C# XML字符串转DataTable

左心房为你撑大大i 提交于 2020-08-16 00:11:11
今天总结一下 关于XML字符串转DataTable 方法: 引用:using System.Xml; using Newtonsoft.Json; using System.Data; using System.Collections; 首先,定义一个xml字符串来接收传过来的数据, string xml = context.Request["xml"]; //<ESBRequest><RequestHeader> <ServiceID>35.A01.06.202</ServiceID> </RequestHeader> <RequestBody> <Rows>... <Row> </Row> <Row>... </Row> </Rows> </RequestBody> </ESBRequest> ESBRequest request = XMLUntils.Deserialize(typeof(ESBRequest), xml) as ESBRequest;//将xml 反序列化为 ESBRequest类 public static object Deserialize(Type type, string xml) { try { using (StringReader sr = new StringReader(xml)) { XmlSerializer xmldes =

.NET开发者省份分布排名

[亡魂溺海] 提交于 2020-08-15 22:29:52
什么叫.NET开发者省份分布排名呢? 顾名思义,这几个词大家都认识,.NET开发者都集中在城市,涵盖一线城市到五线城市。排名的方法非常简单粗暴,就是根据本公众号(dotnet跨平台)的省份订阅读者数量排名的微信大数据分析。 本号从2015年初的三位数订阅到现在五位数的订阅,目前总数6.2w,增长一直平缓从未有过暴增,这显示了传播和反馈的自主选择,目前每天还在增长。同时我注意到一个现象:由于公众号内容都是.NET Core相关的,对.NET 不感兴趣的人,压根就读不下去。 从订阅年龄看, 高达99%的人落在18岁到60岁的区间且分布正态 ,这正是我国劳动人口的年龄, 25岁以下只有20%,所以订阅并不是以大学生为主,这也反映了现在高校中.NET 的教学比较少或者还是以.NET Framework的老旧内容;60岁以上极少,而所谓的“大专家”群体落在这个区间。 从地域分布看, 订阅读者分布在300多个地级市,几乎完整覆盖全国 。我的微信好友还不到5000个,远远达不到这个广度,因此传播是自发形成的。 排名中也提供了海外订阅的比例。我们从中可以看到 海外华人占比3.22%,按人口比例还是很突出的,有大量的.NET开发到北美打拼,那边的.NET环境要比国内好很多 。 这些数据都是借助于微信的大数据,其实后台是根据注册IP判断地址的,会有少量迁移但不影响结果

全面理解 ASP.NET Core 依赖注入

筅森魡賤 提交于 2020-08-15 21:44:17
原文: 全面理解 ASP.NET Core 依赖注入 DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚。另外再介绍一下.NET Core的DI实现以及对实例生命周期的管理(这个是经常面试会问到的问题)。最后再给大家简单介绍一下在控制台以及Mvc下如何使用DI,以及如何把默认的Service Container 替换成Autofac。 我录了一些关于ASP.NET Core的入门视频:有兴趣的同学可以去看看。 http://www.cnblogs.com/jesse2013/p/aspnetcore-videos.html 一、什么是依赖注入 1.1 依赖 1.2 什么注入 为什么反转 何为容器 二、.NET Core DI 2.1 实例的注册 2.2 实例生命周期之单例 2.3 实例生命周期之Tranisent 2.4 实例生命周期之Scoped 三、DI在ASP.NET Core中的应用 3.1 在Startup类中初始化 3.2 Controller中使用 3.3 View中使用 3.4 通过HttpContext来获取 四、如何替换其它的Ioc容器 一、什么是依赖 注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它?

使用Typora写博客,图片即时上传,无需第三方图床-EasyBlogImageForTypora

吃可爱长大的小学妹 提交于 2020-08-15 21:32:31
背景 习惯使用markdown的人应该都知道Typora这个神器,它非常简洁高效。虽然博客园的在线markdown编辑器也不错,但毕竟是网页版,每次写东西需要登录系统-进后台-找到文章-编辑-保存草稿。。。非常难受。。。 但是使用Typora来写的话,文章图片又是个问题,本地写完粘贴到网站上,图片全丢。。。 大多数解决方案是Typora+PicGo+第三方图床,图床有收费的和免费的,总结一下几个常用的: 七牛云 专业,快速,有免费的存储空间。但是免费域名有使用期限,到期后需要自己备案域名。。。 阿里云oss 专业,快速,存储空间便宜,一年9块钱40G。但是下行流量需要另外收费。。。 github 免费。但不是专业图床,国内访问速度太慢。。。 gitee 免费,快速。但不是专业图床,有防盗链风险,比如微信浏览器就打不开gitee的图,gitee官方是禁止用来做图床的。。。 。。。。。。 其实Typora除了支持PicGo上传图片以外,还支持自定义上传服务。于是自己写了个简单程序,在本地写作时,直接把图片传到自己的博客网站,就不用折腾各种第三方图床了,写完直接可以粘贴到网站。 EasyBlogImageForTypora 使用Typora写作,图片即时同步到博客网站,无需第三方图床,写完可直接粘贴。支持网络图片上传。 适用范围 本程序基于.net core 3.1开发,支持在win

FreeSql 与 SqlSugar 性能测试(增EFCore测试结果)

爷,独闯天下 提交于 2020-08-15 15:45:27
这篇文章受大家邀请,与 SqlSugar 做一次简单的性能测试对比。主要针对插入、批量插入、批量更新、读取性能的测试; 测试环境 .net core 2.2 FreeSql 0.3.17 sqlSugarCore 4.9.9.3 sqlserver 14.00.1000 Express、mysql 5.6 测试项目 以 console 程序,创建步骤: 1、dotnet new console 2、dotnet add package FreeSql 3、dotnet add package sqlSugarCore 编码的过程 这个错误来自 sugar 创建数据库的时候,实体定义如下: sugar的没有同步上来。 暂时先用 freesql 帮 sugar 创建了表。。。创建完后如下: 运行时又出现如下错误: 需要加一堆 IsIgnore 是的,还在报错,最终原因是我传入的 songs 是 IEnumerable ,然后接受的参数类型正常应该是 Song[],希望作者看到了可以改进。 以 SqlServer 作为目标库,测试结果 第一次: 第二次: EFCore 也参与进来的测试: uploading-image-353246.png 以 MySql 作为目标库,测试结果 EFCore 也参与进来的测试: 结束语 然而上面提到的批量更新,今天先到这吧。下次有兴致了再测试。

旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

删除回忆录丶 提交于 2020-08-15 15:42:59
一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能 第一时间 发现问题。 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行;一方面,AWS对Linux有较多的监控措施,另一方面,假如出现问题,可以设置自动重启等服务。 老旧的WCF服务 目前WCF服务,主要提供windows桌面软件的 数据接口 ,应该有五六年的历史了。我进入公司后,WCF服务的代码,一直由我一个人来维护。存在很多 历史遗留问题 ,也有 不同版本 的共存。 如果java重写的话,其中的业务逻辑代码,难免会出现各种各样的bug,增加开发和测试的工作量。听说,要移植到linux服务上后,第一时间想到的就是 跨平台 的 .net core 。 .net core 经过了四年的发展,到目前的 3.1 LST版本,已经是 非常成熟 的跨平台解决方案了。 之后,我就在网上查找,有没有WCF的.net core 版本,查询到的信息总结如下: Core WCF不打算做WCF到.NET Core的100%兼容的移植; 对于新应用程序,WCF这种SOAP技术不建议使用; 对于老的应用程序,建议将这些保留在.NET Framework上; 如果您真的想将一个旧的应用程序迁移到.NET Core并且想继续使用WCF和WF, 社区的开源项目也是可以的

.NET 5 尝鲜

久未见 提交于 2020-08-15 14:32:52
.NET 5 尝鲜 - 开源项目TerminalMACS WPF管理端支持.NET 5 一个使用 Prism 作为模块化框架、基于多个开源控件库作为UI控件选择、集成开源 UI 界面设计的 .NET 5 WPF 客户端项目。 项目名称:TerminalMACS WPF管理端 项目开源地址: Github: https://github.com/dotnet9/TerminalMACS.ManagerForWPF Gitee: https://gitee.com/dotnet9/TerminalMACS.ManagerForWPF 作者:Dotnet9 1. 特性 使用 .NET 5 开发,体验最新 .NET 平台(和 .NET Core 3.1 无缝兼容) .NET 5 是 .NET Framework 和 .NET Core 的未来,最终将成为一个统一平台,.NET5将包含ASP.NET核心、实体框架核心、WinForms、WPF、Xamarin 和 ML.NET。 基于 Prism 8 搭建模块化框架,方便程序扩展 Prism为程序设计提供指导,旨在帮助用户更加容易的设计和构建丰富、灵活、易于维护WPF桌面应用程序。Prism使用设计模式(如MVVM,复合视图,事件聚合器),帮助你创建一个松耦合的程序。遵循这些设计模式原则,将目标程序解耦成独立的模块

.NET Core Web APi大文件分片上传研究

一世执手 提交于 2020-08-15 12:52:45
前言 前两天发表利用FormData进行文件上传,然后有人问要是大文件几个G上传怎么搞,常见的不就是分片再搞下断点续传,动动手差不多也能搞出来,只不过要深入的话,考虑的东西还是很多。由于断点续传之前写个几篇,这里试试利用FormData来进行分片上传。 .NET Core Web APi文件分片上传 这里我们依然是使用FormData来上传,只不过在上传之前对文件进行分片处理,如下HTML代码 < div class ="form-horizontal" style ="margin-top:80px;" > < div class ="form-group" > < div class ="col-md-10" > < input name ="file" id ="file" type ="file" /> </ div > </ div > < div class ="form-group" > < div class ="col-md-offset-2 col-md-10" > < input type ="submit" id ="submit" value ="上传" class ="btn btn-success" /> </ div > </ div > </ div > 接下来则是上传脚本,如下: $( function () { $( '#submit')