代码
文章平均质量分 80
Johan.
关注前沿技术,并致力于开源社区与微软平台的组合优化;有多年大数据高并发实践经验、对精简代码并行程序开发、代码美感以及程序员能力修养等相关问题也有着浓厚的兴趣;
展开
-
.NET ABP.Zero 项目疑似内存排查历程
当前项目是 .NET 5 EentityFrameworkCore,疑似内存泄漏,之所以说是疑似是因为到目前位置还没有能准确的定位到问题。当前这个框架从 .NET Core 2.1 就开始用,期间有升级到 3.1、5.0、6.0,在排查过程中还把 5.0 分支升级到了 7.0。不幸的是这些分支都存在疑似泄漏的现象。原创 2023-10-09 17:43:13 · 465 阅读 · 0 评论 -
我请了一个机器人帮我把禅道任务状态改为“已完成”
JavaScript 自动在中午和下班后检查今天以及今天以前是否有任务可以更新为完成状态。原创 2022-10-24 14:21:53 · 712 阅读 · 0 评论 -
JavaScript 通过正则测试页面是否出现连续的重复字符
JavaScript 正则表达式之 search 应用。原创 2022-09-13 15:13:04 · 979 阅读 · 0 评论 -
OpenWrt 更新 “阿里云盘-WebDAV”服务组件
aliyundrive-webdav(阿里云盘-WebDAV)从 1.1.0 升级至 1.7.1 并恢复 Kodi 链接云盘功能原创 2022-07-07 16:25:28 · 20904 阅读 · 1 评论 -
加个按钮花两天时间,居然还有 BUG
看起来很容易的一句话需求,实现起来处处有坑填。原创 2021-12-02 17:42:11 · 117 阅读 · 0 评论 -
CentOS 8 安装 PostgreSQL 10
# Install the repository RPM:sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 禁用内置的 PostgreSQL模块# Disable the built-in PostgreSQL module:sudo dnf -qy module disable postg...原创 2020-12-01 14:42:39 · 2067 阅读 · 0 评论 -
Linq 去重简介
ABP CLI (命令行接口) 是一个命令行工具,用来执行基于ABP解决方案的一些常见操作.InstallationABP CLI 是一个dotnet global tool. 使用命令行窗口安装:dotnet tool install -g Volo.Abp.Cli更新最新版本:dotnet tool update -g Volo.Abp.CliCommands...原创 2020-03-17 17:03:42 · 10009 阅读 · 0 评论 -
无法分配请求的地址(Cannot assign requested address)的解决方案
返回 JSON 内容{ "AccessToken": null, "IdentityToken": null, "TokenType": null, "RefreshToken": null, "ErrorDescription": null, "ExpiresIn": 0, "Raw": null, "Json": null, "Exception": { "Message": "Cannot assign requested address", "Data": {}...原创 2020-10-15 10:33:56 · 9650 阅读 · 1 评论 -
Chrome80调整SameSite策略对IdentityServer4的影响以及处理方案(践行篇)
首选方法:将域名升级为 HTTPS。低成本的证书申请请参建《阿里云免费 DigiCert SSL 证书申请》方法二:使用代码修改SameSite 设置如果没有域名或内网环境,可以使用该方法。源码在文末的参考文档中复制下来可以直接用。private const SameSiteMode Unspecified = (SameSiteMode)(-1);改为private const SameSiteMode Unspecified = SameSiteMode.Lax;新增Sam..原创 2020-09-10 15:41:12 · 1311 阅读 · 0 评论 -
Redis 实现消息队列 .NET Core
消息队列可实现解耦/异构系统Redis 实例化,也可使用单例实例化var _redisClient = ConnectionMultiplexer.Connect(appConfiguration["Abp:RedisCache:ConnectionString"]);var sub = _redisClient.GetSubscriber();发布消息:传递的消息是 string 类型,可以将各种实体或集合序列化后传递。sub.PublishAsync("spd.qd.proj.原创 2020-08-20 16:08:21 · 1982 阅读 · 0 评论 -
C# WinForm 文件夹选择控件 folderBrowserDialog 的应用实例
上期讲到的修改文件创建时间1.从工具箱中“双击” FolderBrowserDialog(或则在类中使用 new FolderBrowserDialog() 均可,本文主要描述窗体使用)。2.加上一个“选择”按钮,在按钮点击事件下添加如下代码/// <summary>选择按钮点击事件</summary>private void BtnSelect_Click(object sender, EventArgs e){ folderBrowserDialog原创 2020-07-03 17:57:03 · 7831 阅读 · 0 评论 -
ABP 如何查询出软删除(SoftDelete)数据
介绍ABP本身是一个包含许多nuget包的模块化框架。它还提供了一个完整的基础架构来开发你自己的具有实体、服务、数据库集成、 API、UI组件等等功能的应用程序模块。模块类每个模块都应该定义一个模块类.定义模块类的最简单方法是创建一个派生自AbpModule的类,如下所示:public class BlogModule : AbpModule{ }配置依赖注入和其他模块ConfigureServices方法ConfigureServices是将你原创 2020-05-11 16:42:00 · 962 阅读 · 1 评论 -
使用 C# 修改文件创建时间(图片也可修改)
收到一个需求,希望修改指定文件的创建时间,并且文件数上千。所以希望通过程序来解决。用户的真实意图暂且不论,首先分析这个事情是否可行,立马搜索几篇文章一扫,得可行结论。既然可行那接下来就朝着实现的方向去搜索,修改方法还停简单。虽然这些功能没有对用户开放,但对于程序来说简直容易到不要不要的。下面是这个工具的界面:由于是 Windows 桌面应用程序,所以在目标框架的选择上选择了 .NET Framework 2.0,这样做会损失很多的开发便利,但是可以提高用户的体验,只要用户在 Windows 10原创 2020-06-23 12:56:37 · 11725 阅读 · 2 评论 -
ABP 在 EntityFramework 中使用扩展批量更新时的异常
报错信息:Invalid Cast. The update expression must be of type MemberInitExpression.直译结果:无效的。更新表达式必须是MemberInitExpression类型。下面是报错对应的写法:await projectsRepository.BatchUpdateAsync(x => new Projects(2...原创 2020-06-16 11:01:08 · 1435 阅读 · 1 评论 -
C#中实现IP地址的排序
这一切的开始要从同事手中的一个医疗项目开始。 早上一到公司,就看到同事跟数据库连接干上了。要处理的问题是判断网络是否连通。因为如果你不去判断的话,系统只会提示说"sa"登录失败,却不告诉你是因为网络的原因,这会让人相当的郁闷。 我们的客户可不喜欢看到这样"不明不白"的错误,于是我们要做的就是帮他"翻译"过来,让他们知道是因为你们的网络不通,先找网管来检查网络...原创 2010-11-01 16:51:00 · 28212 阅读 · 0 评论 -
Volo.Abp 整合 WebApiClient 从请求中获取 Headers 信息
当前有这样一个场景,需要对外提供接口,而这个接口里面可以不写做具体的逻辑,转手调用别的接口,并将请求该接口的 Headers 与数据一起转发,流程如图:如图所示 API Service 接收统一接收请求,但并不处理请求,仅仅只做转发。最终处理请求的是 Other Service。接下来是通过 WebApiClient 快速定义转发接口:namespace ARchGL.Platfor...原创 2019-12-31 10:39:19 · 2847 阅读 · 1 评论 -
正确规避容器自动回收释放资源
场景:服务发布至容器成功运行起来,多一段时间再访问时可能会出现服务已被回收,导致服务停止。场景分析:假设我们的目标是希望服务可以持续运行不中断。这里我们用 IIS 举例,在 IIS 中有两参数会触发回收导致场景。“固定时间间隔(分钟)” 与 ”闲置超时(分钟)“。固定时间间隔(分钟):超过设置的时间后,应用程序池回收,为0时应用程序池不会按固定间隔回收。系统默认设置时间是1740(29小时...原创 2019-12-11 11:09:27 · 7099 阅读 · 0 评论 -
Postgresql 通过 While 循环插入测试数据
需要大批量测试数据时可能会用到SQL批量新增的方法。DO $$DECLAREi INTEGER := 1;identityId BIGINT := 200000000001;BEGIN WHILE i < 100 LOOP identityId = identityId + 1; -- INSERT 语句 -- 将字符串转为 uuid ca...原创 2019-11-26 15:22:54 · 9659 阅读 · 0 评论 -
.NET Core/C# 对接成都智慧工地《建筑垃圾运渣车辆视频监控系统》
1.首先从运渣车识别对接QQ群下载并阅读成都市智慧工地建筑垃圾运渣车辆在线视频监控系统接口及功能要求说明书文档里面只有两个接口,一个获取授权设备列表。另一个是上传识别数据。下面是对接过程中遇到的问题以及解决方案。对接完成后,还需要从现场设备获取数据上传至建委,并且识别错误率不超过10%,就算拿到资质了。2.从群里负责人获取测试账号(appKey,appSecret),并把自己的设备序列...原创 2019-11-15 12:07:33 · 3492 阅读 · 0 评论 -
微软验证码项目 Captcha Code Demo 从 .NET Core 1.1.2升级到2.1.0
How to make and use captcha code in ASP.NET Core在ASP.NET Core 中如何实现 captcha 验证码这个 Demo 是在微软 msdn 中找到的,早期 2017年6月30日发布。发现它的时候是 2019年10月30日。这时候 .NET Core 版本 3.0 已发布。Visual Studio 2019 也已经自动更新至 16...原创 2019-10-30 15:03:50 · 13986 阅读 · 0 评论 -
ABP 启用多租户实现数据隔离
多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。 多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。一个支持多租...原创 2019-10-16 15:46:14 · 3793 阅读 · 0 评论 -
C# EntityFramework 同时使用多个连接导致的异常
System.InvalidOperationException: There is already an open DataReader associated with this Connection which must be closed first.出现上面这个错误,就说明代码中出现了多个数据库连接,在操作下一个连接之前必须将上一个连接关闭。解决方法有多种,下面是比较常见的方...原创 2019-01-22 11:54:41 · 4643 阅读 · 0 评论 -
.NET Core 通过注入的方式获取 appsettings.json 中的信息
配置文件是开发过程中必不可少的元素,今天讲到的就是如何优雅的获取配置文件信息,下面是实践步骤:1.在appsettings.json中找个地方写入配置文件信息"TestConfigration": { "Item1": "1", "Item2": "2"}2.新建对应类,用于存储配置信息public class TestConfigration{ ...原创 2019-07-17 11:42:14 · 4873 阅读 · 0 评论 -
ABP 扩展 UserOrganizationUnit / UserRole 等中间表
AbpUserOrganizationUnits / AbpUserRoles这两张表是 ABP 框架内的表,因为AbpUsers 用户主键现在是 long,新增了一个 Guid 类型的PrimaryId 字段后,对外就不再传递 long 类型的主键,所以就出现了修改这两张中间表的需求。下面是扩展 UserRole 的实现过程,UserOrganizationUnit 实现过程一样。1...原创 2019-07-04 18:27:37 · 3087 阅读 · 0 评论 -
C# 判断当前编译运行配置 Debug / Release
在开发过程中,可能会有一些代码只在 Debug 或 Release 环境运行。所以就需要判断当前运行环境。下面提供一个公共方法可以放到自己的工具类中。 public static class DebugHelper { public static bool IsDebug { get {#prag...原创 2019-07-09 14:09:44 · 5503 阅读 · 0 评论 -
解读 ABP RandomHelper 内部实现源码
ABP 源码中存在一个对随机值 Random 的封装帮助类,可以帮助用户快速获取随机数,并且该类是以单例模式封装,还可以提升复用率以及性能。下面我们来解读下 RandomHelper 类的具体实现。1.首先声明静态只读 Random (单例)private static readonly Random Rnd = new Random();2.通过传入最小最大值取随机整数,不得不佩服...原创 2019-06-26 15:09:26 · 4270 阅读 · 0 评论 -
.NET Core 通过配置文件设置 Swagger 名称
1.找到在 Startup 类services.AddSwaggerGen2.options.SwaggerDoc("v1", new Info { Title = appConfiguration["App:Title"], Version = "v1" });通过读取配置文件的方式获取名称,这样就可以不用修改代码重启生效,如下图:如果是小项目,这个名称无所谓,就当是YY了。...原创 2019-06-18 18:47:52 · 5621 阅读 · 0 评论 -
.NET Core 获取 Request/Headers 等信息
1.在 Startup.cs 类ConfigureServices 方法中注入IHttpContextAccessor;services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();2.在需要使用的类的构造函数注入IHttpContextAccessor 即可使用;public cla...原创 2019-06-11 11:15:10 · 38117 阅读 · 3 评论 -
ABP JsonExtensions 内部实现源码
调用方式:str.FromJsonString<List<Guid>>();//字符串转集合list.ToJsonString();//集合转字符串using JetBrains.Annotations;using Newtonsoft.Json;using System;namespace Abp.Json{ public stati...原创 2019-07-24 15:08:56 · 4203 阅读 · 0 评论 -
WebApiClient 不支持将 ContentType 为的内容反序列化为 xXx 的解决方案
通过 WebApiClient 调用第三方接口时,可能会遇到如下异常些信息:[EXCEPTION]WebApiClient.ApiReturnNotSupportedExteption: 不支持将ContentType为的内容反序列化为 Volo.AjaxResponse`1[System.Collections.Generic.List`1[Volo.ProjectDto]] ...原创 2019-07-31 11:01:05 · 5064 阅读 · 0 评论 -
ABP 内置 NameValue 对象
这个类的最主要作用就是节约一个类,其他没发现有什么特别的。而且像 键/值 队的这种场景也确实却在一些。using System;namespace Abp{ /// <summary> /// Can be used to store Name/Value (or Key/Value) pairs. /// </summary> ...原创 2019-08-20 19:23:23 · 5165 阅读 · 0 评论 -
ABP 中“To”方法使用解析(类型转换公共方法)
To 方法内部实现是类型转换的一个扩展方法。该方法封装精妙,可以替代曾今封装过的一组ToInt32 / ToGuid / ToDateTime 。。。该方法命名空间:using Abp.Extensions;/// <summary>/// Converts given object to a value or enum type using <see cref="...原创 2019-08-13 10:28:05 · 6977 阅读 · 0 评论 -
Postgresql 字符串截取
在一次数据迁移中,遇到的一个场景。需要从一串 JSON 中提取其中一段字符串。在 Bing 上搜索发现很少在 Postgresql 中用到字符串截取的。下面是解决的方法,不一定好,但恰好可以解决问题。JSON 字符串'{"item":{"id":"c0540d7e-bedb-4521-b2b1-401d099575d1","name":"这时一张图片.jpg","path":"5cb...原创 2019-08-27 16:26:23 · 6821 阅读 · 0 评论 -
深入浅出-应用程序启动模板
报错信息:Invalid Cast. The update expression must be of type MemberInitExpression.直译结果:无效的。更新表达式必须是MemberInitExpression类型。下面是报错对应的写法:await projectsRepository.BatchUpdateAsync(x => new Projects(2...原创 2019-09-18 10:42:55 · 2905 阅读 · 0 评论 -
详解 .NET Core 遍历 List 并移除项
赶时间,请直接看最后在开发过程中时常会遇到需要遍历集合并移除指定项的场景,我们用不同方法来尝试获得我们希望的结果。首先声明将要用到的 list 对象。var list = new List<string>() { "Item1", "Item2", "Item3", "Item3-1", "Item3-2" };方法1:很大可能性会这些写,下面的代码看起来完全没问题,...原创 2019-10-02 12:19:54 · 18019 阅读 · 0 评论 -
.NET Core 深度克隆对象,引用类型的平行世界
当我们需要将一个引用类型对象独立出来与原来的引用完全撇清关系时,可以使用这个方法。/// <summary>/// 克隆一个对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="source"></param>/// <r...原创 2019-10-08 09:20:05 · 7671 阅读 · 0 评论 -
.NET Core 使用 WebApiClient.JIT 调用第三方接口
开始前首先通过 NuGet 引入包,当前使用版本为 v1.0.9,发布日期 2019年5月21日Github:https://github.com/dotnetcore/WebApiClient 注意底部有Wiki文档对使用非常有帮助,请仔细阅读。1.新建 xxxHttpsModule 并在StartupConfigureServices 中注入。(单独新建 HttpsModul...原创 2019-06-04 15:01:18 · 4711 阅读 · 0 评论 -
在 foreach 中操作集合时报错:Collection was modified; enumeration operation may not execute.
错误信息:System.InvalidOperationException: Collection was modified; enumeration operation may not execute.在 foreach 操作集合时就有可能遇到这个错误提示。下面将描述场景并提供解决方案:var dict = new Dictionary<string, Dictionary<...原创 2019-05-31 14:19:43 · 14471 阅读 · 0 评论 -
ABP 扩展 Role 数据实体(新增字段)
Role 数据实体 继承自 AbpRole 类,并且 AbpRole 是 abstract 类型。所以新增属性直接添加在 Role 中即可。效果如下:最后再重新执行迁移就生效了。迁移命令Add-MigrationUpdate-Database以上信息均参考ABP文档:https://docs.aspnetzero.com/documents/zero/lat...原创 2019-03-04 15:10:58 · 5452 阅读 · 0 评论 -
C# EntityFramework 自定义数据库表名(一)
在数据实体上加 Table 属性,效果如下命名空间using System.ComponentModel.DataAnnotations.Schema;特别注意属性名称是 Table 一不小心会写成 TableName原创 2019-02-27 09:46:02 · 4273 阅读 · 0 评论