Abp vNext 源码分析 - 4. 工作单元

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

异常吞噬问题一则

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

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

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

在 DotNetty 中实现同步请求

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

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

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