自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(94)
  • 收藏
  • 关注

转载 [Abp vNext 源码分析] - 8. 审计日志

一、简要说明ABP vNext 当中的审计模块早在 依赖注入与拦截器一文中有所提及,但没有详细的对其进行分析。审计模块是 ABP vNext 框架的一个基本组件,它能够提供一些实用日志记录。不过这里的日志不是说系统日志,而是说接口每次调用之后的执行情况(执行时间、传入参数、异常信息、请求 IP)。除了常规的日志功能以外,关于 实体 和 聚合 的审计字段接口也是存放在审计模块当中的。...

2019-10-08 11:25:00 767

转载 Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD

随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了。一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛。即便你的项目少,每次花费在发布上面的时间累计起来都够你改几个 BUG 了。所以我们需要自动化这个流程,让项目的发布和测试不再这么繁琐。在这里我使用了 Jenkins 作为基础的 CI/CD Pipeline 工具,关于 J...

2019-09-25 11:40:00 398

转载 在 ABP vNext 中编写仓储单元测试的问题一则

一、问题新项目是基于 ABP vNext 框架进行开发的,所以我要求为每层编写单元测试。在同事为某个仓储编写单元测试的时候,发现了一个奇怪的问题。他的对某个聚合根的 A 字段进行了更新,随后对某个导航属性 B 也进行了变更,最后通过仓储提供的 UpdateAsync() 方法对变更的数据进行持久化。结果再次查出来的时候,发现聚合根的 A 字段倒是更新了,但是导航属性 B 的内部字段没...

2019-09-18 10:51:00 440

转载 CentOS 7.x 安装 ZSH 终端

一、安装基本组件首先执行 yum 命令来安装需要的 zsh 原始程序与 git 程序来 pull 代码。yum install -y zsh git安装 oh my zsh 脚本 (这一步需要安装 git)。wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh使...

2019-08-26 19:45:00 262

转载 [Abp vNext 源码分析] - 7. 权限与验证

一、简要说明在上篇文章里面,我们在 ApplicationService 当中看到了权限检测代码,通过注入 IAuthorizationService 就可以实现权限检测。不过跳转到源码才发现,这个接口是 ASP.NET Core 原生提供的 “基于策略” 的权限验证接口,这就说明 ABP vNext 基于原生的授权验证框架进行了自定义扩展。让我们来看一下 Volo.Abp.Ddd....

2019-08-07 08:08:00 1610

转载 移除 DevExpress 的 XtraForm 标题文字阴影

问题在使用 DevExpress 开发 WinForm 程序时,我是使用的默认皮肤进行开发。但客户要求标题栏背景色改为蓝色,标题文字颜色改为白色。改颜色比较简单,参考了 DevExpress Support 的说明,通过获取皮肤更改 BackColor 和 ForeColor 就可以实现。不过更改之后,发现在低分屏下面,标题文字出现模糊的情况。原因初步猜想应该是文字阴影的问题...

2019-07-31 14:20:00 198

转载 [Abp vNext 源码分析] - 6. DDD 的应用层支持 (应用服务)

一、简要介绍ABP vNext 针对于应用服务层,为我们单独设计了一个模块进行实现,即 Volo.Abp.Ddd.Application 模块。PS:最近博主也是在恶补 DDD 相关的知识,这里推荐大家看一下 ThoughtWorks 的 DDD 相关文章。关于 DDD 相关的著作,我这儿还是推荐经典的那三本《领域驱动设计:软件核心复杂性应对之道》、《实现领域驱动设计》、《领域驱...

2019-07-25 20:04:00 303

转载 [Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)

一、简要介绍ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体、仓储、值对象、领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都存放在 Volo.Abp.Ddd.Domain 项目当中。本篇文章将会侧重于理论讲解,但也只是一个抛砖引玉的作用,关于 DDD 相关的知识可以阅读 Eric Evans 所编写的 《领域驱...

2019-07-20 09:39:00 1577

转载 [Abp vNext 源码分析] - 4. 工作单元

一、简要说明统一工作单元是一个比较重要的基础设施组件,它负责管理整个业务流程当中涉及到的数据库事务,一旦某个环节出现异常自动进行回滚处理。在 ABP vNext 框架当中,工作单元被独立出来作为一个单独的模块(Volo.Abp.Uow)。你可以根据自己的需要,来决定是否使用统一工作单元。二、源码分析整个 Volo.Abp.Uow 项目的结构如下,从下图还是可以看到我们的老朋友 I...

2019-07-01 09:28:00 338

转载 异常吞噬问题一则

问题在一个 Timer 时钟的周期方法内,有一个 foreach 循环,当执行到某些特定的语句时,会从头开始执行,而不会执行后续的语句。分析该问题我在初步分析之后,发现可能是由于程序出现了异常,但是被吞噬掉造成的。在我某一个 item 元素当中,其值为 null 应该会抛出空异常。但是没有异常抛出,后续我不知道哪个地方吞噬了异常,就在循环体内增加了一个 if 语句过滤掉了 null...

2019-06-23 21:19:00 85

转载 使用 Polly 实现复杂策略(超时重试)

一、背景第一次接触 Polly 还是在做某个微服务系统的时候,那时只会使用单一的超时策略与重试策略,更加高级的特性就没有再进行学习了。最近开为某个客户开发 PC 端的上位机的时候,客户有个需求,在发起请求之后如果 5 秒钟没有响应则进行重试,总共可以重试 3 次,如果 3 次请求都未返回数据,就视为请求失败。关于 Polly 的高级用法可以参考官方的 Wiki 文档即可,国内也有很多...

2019-06-11 18:34:00 478

转载 在 DotNetty 中实现同步请求

一、背景DotNetty 本身是一个优秀的网络通讯框架,不过它是基于异步事件驱动来处理另一端的响应,需要在单独的 Handler 去处理相应的返回结果。而在我们的实际使用当中,尤其是 客户端程序 基本都是 请求-响应 模型,在发送了数据时候需要等待服务器的响应才能进行下一步操作,如果服务器返回的是错误信息,则需要进行特殊的处理。类似于下面这种方式:public async void...

2019-05-22 09:49:00 150

转载 使用 C# 实现 CJ-T188 水表协议和 DL-T645 电表协议的解析与编码

一、协议的定义要对某种协议进行编解码操作,就必须知道协议的基本定义,首先我们来看一下 CJ/T188 的数据帧定义(协议定义),了解请求数据与响应数据的基本结构。1.1 CJ/T188 水表通讯协议请求帧:字节值描述00x68数据帧开始标识。1T表计类型代码,详细信息请参考 表计类型表 。2-8A0-A6表计地址,水表设备的具体地址,这...

2019-05-21 09:25:00 2474

转载 DevExpress 使用 GridControl 时,数据源无法立即更新的问题

背景在使用 DevExpress 的 GridControl 为其实现 Checkbox 列,发现如果勾选了三行的数据,在遍历 GridControl 绑定的数据源时 Checkbox 列的数据仅有 2 行被更新。原因使用 Google 搜索了半天,在 DevExpress 的 Support 上找到了答案,似乎是需要手动调用 GridControl 关联 View 的 PostE...

2019-05-20 16:04:00 1467

转载 C# 校验并转换 16 进制字符串到字节数组

问题最近在进行硬件上位机开发的时候,经常会遇到将 16 进制字符串转换为 byte[] 的情况,除了这种需求以外,还需要判定一个字符串是否是有效的 16 进制数据。解决字符串转 byte[] 的情况可以使用 Convert.ToByte(string) 来解决,16 进制数据的判定则可以结合正则和长度来进行处理。在这里我是只接受以下两种形式的 16 进制字符串,并对其进行验证和转...

2019-05-04 23:37:00 220

转载 [Abp vNext 源码分析] - 3. 依赖注入与拦截器

一、简要说明ABP vNext 框架在使用依赖注入服务的时候,是直接使用的微软提供的 Microsoft.Extensions.DependencyInjection 包。这里与原来的 ABP 框架就不一样了,原来的 ABP 框架还需要抽象出来一个 IIocManager 用来管理整个 IoC 容器,现在则直接操作 IServiceCollection 与 IServiceProvid...

2019-04-23 10:40:00 1337

转载 [Abp vNext 源码分析] - 2. 模块系统的变化

一、简要说明本篇文章主要分析 Abp vNext 当中的模块系统,从类型构造层面上来看,Abp vNext 当中不再只是单纯的通过 AbpModuleManager 来管理其他的模块,它现在则是 IModuleManager 和 IModuleLoader 来协同工作,其他的代码逻辑并无太大变化。Abp vNext 规定每个模块必须继承自 IAbpModule 接口,这样 vNext...

2019-04-19 10:28:00 149

转载 [Abp vNext 源码分析] - 文章目录

一、简要介绍ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 8 月 20 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.19.0 ,可以尝试用于生产环境。新的 ABP vNext 框架完全是基于 ASP .NET Core 进行开发,其完全模块化的组件库能够让开发人员拥有更多的选择空间。ABP vNext 框架核心库比 ABP 框架...

2019-04-17 11:39:00 355

转载 [Abp vNext 源码分析] - 1. 框架启动流程分析

一、简要说明本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的。总的来说 ,Abp vNext 比起 ABP 框架更加精简。因为在 vNext 版本当中,原来归属于 Abp 库的许多内置的基本组件 (组织单元、拦截器等) 被拆分成了单独的模块,这样我们来看它整个启动流程就更加地直观清晰。二、源码分析...

2019-04-17 11:35:00 373

转载 为什么不要使用 async void?

问题在使用 Abp 框架的后台作业时,当后台作业抛出异常,会导致整个程序崩溃。在 Abp 框架的底层执行后台作业的时候,有 try/catch 语句块用来捕获后台任务执行时的异常,但是在这里没有生效。原始代码如下:public class TestAppService : ITestAppService{ private readonly IBackgroundJobMa...

2019-04-03 10:58:00 176

转载 了解一致性哈希算法

用途一致性哈希算法是为了解决普通哈希算法的热点问题,当使用普通哈希算法来切割数据到不同的缓存服务器时。一旦缓存服务器的数量产生变化,客户端向缓存服务器请求相应的数据就不会命中,转而请求具体的数据库服务器,从而造成 缓存击穿。下面我们来看一下使用普通哈希算法时所带来的问题,假如我们拥有 10 台缓存服务器,那么我们在存放数据的时候可以对缓存数据项的 Key 进行哈希操作,取得其散列值...

2019-03-26 17:28:00 101

转载 NuGet 手动清除缓存不起作用

问题有时更新了一些内网的程序库/包,但仅仅是一些小的更改,不想增加版本号再推送到内网服务器。手动删除了 .nuget 文件夹下的相关包文件,但是使用 Visual Studio 重新构建的时候,其使用的包版本仍然不正确。原因原因未知,可能是由于缓存未清理彻底造成的。解决NuGet 包相关的文件夹,除了 .nuget 文件夹以外,还有其他两个缓存/临时文件夹,将这两个文件夹清空之...

2019-03-25 08:57:00 375

转载 ASP.NET Core 使用 SignalR 遇到的 CORS 问题

问题将 SignalR 集成到 ASP.NET Core MVC 程序的时候,按照官方 DEMO 配置完成,但使用 DEMO 页面建立连接一直提示如下信息。Access to XMLHttpRequest at 'http://localhost:8090/signalr-myChatHub/negotiate' from origin 'null' has been blocked...

2019-03-11 16:32:00 961

转载 使用 .NET Core 开发 BT Tracker 服务器

一、什么是 BT Tracker ?在 BT 下载过程当中,我们如果拿到一个种子文件,在其内部会包含一组 BT Tracker 服务器信息。在开始进行下载的时候,BT 下载工具会根据种子内的唯一 HASH 码请求 Tracker 服务器,之后 Tracker 服务器会返回给正在 下载/做种 的 Peer 信息,下载工具获得了其他的 Peer 信息之后就会与其他的 Peer 建立通讯下载...

2019-03-08 08:29:00 239

转载 Castle Windsor 的动态代理类如何获取实际类型

问题在实际开发过程当中我们可能会针对某些类型使用动态代理技术(AOP),注入了一些拦截器进行处理,但是一旦某个类型被动态代理了,那么就会生成一个代理类。这个时候在该类内部使用 GetType() 方法获取到的 Type 类型并不是实际类型的 Type,而是代理类的 Type。解决那么我们如何在代理类当中获取到具体类型的 Type 呢?其实 Castle 给我们提供了一个工具类,叫做...

2019-03-07 09:12:00 162

转载 .NET Core 使用 HttpClient SSL 请求出错的解决办法

问题使用 HTTP Client 请求 HTTPS 的 API 时出现 The certificate cannot be verified up to a trusted certification authority 异常,并且证书已经传入。下面就是问题代码:public class Program{ public static void Main(string[] ...

2019-03-06 11:18:00 858

转载 CentOS Too Many Open Files 解决

问题在使用 WRK 对应用服务进行压测的时候,提示 "too many open files" 信息,导致无法启动测试。原因CentOS 7.x 默认的打开文件数目限制为 1024,如果在使用其他软件出现 "too many open files" 的错误。解决只需要更改 /etc/security/limits.conf 文件里面的内容,增加如下信息即可。* soft np...

2019-03-03 21:22:00 324

转载 C# 使用 HttpClient 调用 WebService 提示 NoSOAPAction

问题在自行构造 HttpClient 请求 SOAP 接口之后,返回 500 错误,并且提示 NoSOAPAction 信息。原因造成这个问题的主要原因是因为缺少了 SOAPAction 标头,所以提示该信息。解决解决问题很简单,只需要在请求的时候,为其 Header 增加一个 SOAPAction 标头,并且将其值设置为你需要调用的 SOAP 接口。例如:var webR...

2019-03-02 16:46:00 870

转载 针对 Ocelot 网关的性能测试

一、背景目前我们项目是采用的 Ocelot 作为 API 网关,并且在其基础上结合 IdentityServer4 开发了一套 API 开放平台。由于部分项目是基于 ABP 框架进行开发的,接口的平均 QPS 基本是在 2K~3K /S 左右 (E3 1231 16G)。采用 Ocelot 进行请求转发之后,前端反馈接口调用速度变慢了,也没有太过在意,以为是项目接口的问题,一直在接口上...

2019-02-19 15:20:00 671

转载 C# 当中 LINQ 的常规用法(Lambda 方式)

仅以本篇博文记录 LINQ 相关操作的基本知识,原型参考自 MSDN 相关知识,中间加以自己的理解与 DEMO。1. IEnuemrable<T>.Select()Select 方法比较简单,就是在原有序列的基础上,为每个元素建立一个新的输出形式(类型)。标准用法如下:public class TestClass{ public string Name ...

2019-02-18 16:57:00 383

转载 C# 多线程学习笔记 - 3

本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段。遵循原作者的 CC 3.0 协议。如果想要了解更加详细的文章信息内容,请访问下列地址进行学习。原文章地址:https://blog.gkarch.com/threading/part3.html一、基于事件的异步模式基于事件的异步模式 (event-based asynchrono...

2019-02-15 08:36:00 440

转载 C# 当中 foreach 的原理

在 C# 当中的 foreach 语句实际上就是遍历迭代器的语法糖。例如我们拥有以下代码:public class TestClass{ public void TestMethod() { var integers = new int[] {1,2,3,4,5,6,7,8,9}; foreach(var @int i...

2019-02-14 10:18:00 93

转载 JSON 序列化的时候忽略无效的属性值

例如我拥有以下代码。public class NewObject{ public int? TestValue { get; set; } public int? Age { get; set; }}当我为 TestValue 属性传入一个非法数据的时候,在使用 JSON.NET 进行反序列化时会抛出异常。例如我通过以下代码对一个字符串进行反序列化,如果不出意外...

2019-02-02 09:50:00 496

转载 C# 多线程学习笔记 - 2

本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段。遵循原作者的 CC 3.0 协议。如果想要了解更加详细的文章信息内容,请访问下列地址进行学习。原文章地址:https://blog.gkarch.com/threading/part2.html一、同步概要同步构造基本分为四种,简单的阻塞方法、锁构造、信号构造、非阻塞同步构造。1....

2019-01-31 18:55:00 163

转载 C# 多线程学习笔记 - 1

本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段。遵循原作者的 CC 3.0 协议。如果想要了解更加详细的文章信息内容,请访问下列地址进行学习。原文章地址:https://blog.gkarch.com/threading/part1.html基础知识静态字段是在所有线程当中共享状态的。一个线程被阻塞时,不会消耗 CPU 资源。...

2019-01-31 18:51:00 86

转载 C# 结合 using 语句块的三种实用方法

一、简介阅读 Abp 源码的过程中,自己也学习到了一些之前没有接触过的知识。在这里,我在这儿针对研究学习 Abp 框架中,遇到的一些值得分享的知识写几篇文章。如果有什么疑问或者问题,欢迎大家评论指正。在本篇主要是 Scoped 范围与 using 语句块的使用。using 语句块大家一定都不陌生,都是与非托管对象一起存在的,它有一个特性就是在 using 语句块结束的时候会调用对象的...

2019-01-16 09:22:00 348

转载 Abp + MongoDb 改造默认的审计日志存储位置

一、背景在实际项目的开发当中,使用 Abp Zero 自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现 Abp 的 IAuditingStore 接口,来让我们的审计日志数据存储在 MongoDb 当中。二、实现2.0 引入相关包这里我们需要在模块项目引入 Abp 与 mongocsharpdriver 包,引入...

2019-01-14 10:03:00 692

转载 个人整理的 Windows 下 .NET 开发必装的软件

注:最后更新时间:2019-03-15一、.NET 开发1. 必装软件名称说明下载地址JetBrains ToolboxJetBrins 全家桶管理工具。下载地址JetBrains Rider跨平台 .NET 开发 IDE,支持 .NET Core 程序开发。Toolbox 安装JetBrains GoLand跨平台 Golang 的...

2019-01-13 19:33:00 292

转载 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

一、背景在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能。Grafana 是一款功能强大的仪表盘面板,支持多种数据源,可以自定义图表进行监控。而 Prometheus 就是 Grafana 支持的数据源之一,Prometheus 负责采集需要监控的数据,然后通过 Grafana 展示出来。Prometh...

2019-01-11 10:50:00 411

转载 CentOS 7.x 安装 Docker-Compose

一、安装步骤添加企业版附加包。yum -y install epel-release安装 PIP。yum -y install python-pip更新 PIP。pip install --upgrade pip安装 Docker Composepip install docker-compose二、可能遇到的问题在执行 pip install docker-co...

2019-01-11 09:43:00 80

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除