实现一个事件总线
2024/5/27 11:38:15

使用 C# 实现一个 Event Bus Event Bus(事件总线)是一种用于在应用程序内部或跨应用程序组件之间进行事件通信的机制。它允许不同的组件通过发布和订阅事件来进行解耦和通信。 在给定的代码片段中,我们可以看到一个使用C#实现的Event Bus。它定义了一些接口和类来实现事件的发布和订阅。 首先,我们有两个基本的约束接口:IEvent和IAsyncEventHlerTEvent。IEvent是一个空接口,用于约束事件的类型。IAsyncEventHlerTEvent是一个泛型接口,用于约束事

本地事件总线和事务
2024/5/27 11:38:15

本地事件总线和事务 通过重写Ef Ce的SaveChangesSaveChangesAsync来实现事务。当然,如果您愿意实现仓储层,可以在仓储层实现展开对应实体包含的事件,并且调整事件的处理顺序。 Github仓库地址:sodaeventbus 实现AggregateRoot类 AggregateRoot类主要通过一个集合来记录本次事务的所有事件,到保存前再展开读取,在Abp中采用的ICollection记录的本地事件,通过实现一个排序器来保证顺序问题,我这里直接采用了ConcurrentQueue,保

IIS通过ARR实现负载均衡
2024/5/27 11:38:11

一、实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访问的,必须要用80和443端口),只能通过IIS的方式实现了。 这里用2个服务在一台机器上负载来做演示,2个服务+一个代理我们需要建3个网站 127.0.0.1:8050 (代理网站,客户端访问的地址,用来绑定访问的域名和端口的) 127.0.0.1:8051(负载的服务1,代理网站会转发到这里来) 127.

码农的转型之路-偶遇大佬情况或有变
2024/5/27 11:38:09

元旦快乐,先回顾23年最后一篇帖子《码农的转型之路造轮子还继续吗?》 一、最新调研情况 感谢大家的热心建议,从最近几天的调研反馈来看,还是劝退者居多! “ 有质疑工具可行性的、有对商业模式提出问题的、有提出支招如何防盗版的,有些出谋划策怎么收费的” 二、偶遇大佬情况或有变 这段时间陆续和几位园子的朋友交流,其中有2位交流比较多。第一位是北方的朋友,公司是暖通行业,使用PLC采集温湿度、控制电磁阀等传感器,之前在局域网下运行基本都ok,现在客户需要跨网络控制,也就是多个局域网组网,另外需要在手

ASP.NET Core 配置系列一
2024/5/27 11:38:08

ASP. Ce 配置主要通过这3个文件设置: 1 项目文件也叫.csproj 文件 2 Program.cs 3 appsettings.json 这些配置告诉ASP. Ce 应用程序基于用户的交互是如何工作的,在本节中我们理解ASP. Ce 项目配置文件,我们创建一下空的项目模版 1 使用空模板创建项目 当你使用空模板创建一个项目时,自己手动做一些配置,这个过程有助于我们更好的理解内部的工作原理,包括: 1.1 添加Controllers,View&Models文件夹 1.2 添加appsetti

【ASP.NET Core】使用SignalR推送服务器日志
2024/5/27 11:38:07

一个多月前接手了一个产线机器人项目,上位机以读写寄存器的方式控制机器人,服务器就是用 ASP. Ce 写的 Web API。由于前一位开发者写的代码质量问题,导致上位机需要16秒才能启动。经过我近一个月的改造,除了保留业务逻辑代码,其他的基本重写。如今上位机的启动时间在网络状态良好的条件下可以秒启动。原上位机启动慢的原因: 1、启动时使用同步方式访问 Web API,在网络较弱时需要等待很长时间。我改为导步请求,并且不等待请求结果,直接显示窗口;如果前面的请求失败,在窗口显示后再次发出异步请求,并且不等待

【C# 技术】C# 常用排序方式
2024/5/27 11:38:05

前言在最近的项目中经常会对C#中的数据进行排序,对于基本数据类型,其排序方式比较简单,只需要调用内置算法即可实现,但对于自定义数据类型以及自定义排序规则的情况实现起来就比较麻烦,所以在本文章中将详细介绍一下在中C#中如何对数据进行排序。应用技术:LINQ Array.St()1. 常规数据排序 1.1 使用St排序对于系统内置数据,我们可以使用St方法直接进行排序,默认是采用正序进行排序,此处提供了三种方式:方式一:使用默认的St()方法直接就可以进行排序。 方式二:使用St()方法并添加回调函数,回调函

1、前言 2、概述
2024/5/27 11:38:04

1.0 学习目标了解Git基本概念 能够概述git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用 Visual StudioRiderVSCode 操作git1.1 需要的知识储备linux 基本命令编程入门基础简单的docker 基础(会安装容器即可)1.2 适合学习人群在校大学生初入社会的开发人员 2.1、为什么需要代码版本控制工具 Git是目前世界上最先进的分布式版本控制系统(没有之一)。 Git有什么特点?简单来说就是:高端大气上档次! 那什么是版本控制系统? 如果你用M

如何在 EF Core 中使用乐观并发控制
2024/5/27 11:38:04

什么是乐观并发控制? 乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低。在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时,再检查是否有其他并发操作已经修改了数据。如果检测到冲突,系统 再采取相应的措施来解决冲突。 EF Ce 内置了使用并发令牌列实现的乐观并发控制,所谓的并发令牌列通常就是被并发操作影响的列。请看本文是如何在 EF Ce 中使用乐观并发控制的…… 使用步骤创建一个 Asp. console 项目,并从 Nuget

Taurus .Net Core 微服务开源框架:Admin 插件【4-8】
2024/5/27 11:38:03

前言:继上篇:Taurus . Ce 微服务开源框架:Admin 插件【47】 配置管理Mvc【PluginMetric 接口调用次数统计】 本篇继续介绍下一个内容: 1、系统配置节点:Mvc Plugin Limit 接口访问限制、IP限制、Ack限制: 配置界面如下:限制目前提供以下三个类别的限制:1、Rate 访问频率限制 2、IP IP黑名单限制 3、Ack 请求头验证1、Limit.IsIgneLAN:是否忽略对内网IP的限制 对三种类别限制都有效。 2、Limit.IsIgneAdmin

记一次应用程序池崩溃问题分析
2024/5/27 11:38:02

问题现象: IIS部署的asp. ce服务,前端进行一些操作后,经常需要重新登陆系统。 初步分析: 根据日志,可以看到服务重新进行了初始化,服务重启应该与IIS应用程序池回收有关,查看IIS相关日志,在windows的事件查看器=Windows日志=系统,来源为WAS的日志(参考博客)。 根据IIS日志与服务日志对比发现,每次服务重启对应一次WAS警告信息,详细信息为:“为应用程序池“xxx”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进

ASP.NET Core 鉴权授权一(简单的Cookie)
2024/5/27 11:38:01

鉴权(Authentication)授权(Authization) 简单的理解:鉴权衡量你能不能进一道门,授权是你进门了可以干什么 Cookie 1.HTTP无连接无状态,Cookie和Session就是解决此问题。 2.客户端向服务器端发送一个请求的时,服务端向客户端发送一个Cookie 然后浏览器将Cookie保存,之后每次HTTP请求浏览器都会将Cookie发送给服务器端,需要衡量把什么数据放到cookie中,很多数据并不是每次请求都需要发给服务端,网络开销,浪费带宽,最典型的放身份认证信息。 3.

WPF自定义控件之ItemsControl鱼眼效果
2024/5/27 11:38:01

原理 先获取鼠标在控件中的坐标,在获取其每一项相对于ItemsControl的坐标,然后计算每一项离当前鼠标的距离,在根据这个距离,对其每一项进行适当的缩放 实现 创建一个类,命名为FishEyeItemsControl public class FishEyeItemsControl : ItemsControl 添加应用鱼眼效果方法(控制其控件的缩放)private void ApplyFishEyeEffect(UIElement element double strength double a

使用C#如何监控选定文件夹中文件的变动情况?
2024/5/27 11:38:00

目录✨ 1、前言 2、效果 3、具体实现 ​ 页面设计 ​ 全部代码 ​ FileSystemWatcher的介绍 ​ FileSystemWatcher的构造函数 ​ FileSystemWatcher的属性 ​ FileSystemWatcher的事件 4、总结 前言✨ 有时候我们会有监控电脑上某一个文件夹中文件变动情况的需求,在本文中,我也会以一个具体的例子,说明在C#中如何

试试这 6 个小技巧,提升 EF Core 性能
2024/5/27 11:37:59

Entity FrameWk(简称 EF)以面向对象的方式操作数据库给开发人员带来了很大的便利性,但其性能问题从面世以来就一直就被广大的 . 生态开发技术人员所吐槽,然而,它真的那么不堪使用吗?试试下面这 6 个小技巧,瞬间极大提升 EF Ce 性能:AsNoTracking 在项目开发的时候,如果查询出来的对象不会被修改、删除等,那么在查询的时候,可以启用AsNoTracking,这样就能降低EF Ce的资源占用 Book[] books = ctx.Books.AsNoTracking().Take(

记一次 .NET某股票交易软件 灵异崩溃分析
2024/5/27 11:37:58

一:背景 1. 讲故事 在dump分析的旅程中也会碰到一些让我无法解释的灵异现象,追过这个系列的朋友应该知道,上一篇我聊过 宇宙射线 导致的程序崩溃,后来我又发现了一例,而这一例恰恰是高铁的 列控连锁一体化 程序,所以更加让我确定这是由于 电离辐射 干扰了计算机的 数字信号 导致程序的bit翻转,而这一篇也是一个我认为的 灵异现象,拿出来给朋友们分享一下。 前段时间有位朋友找到我,说他的程序会偶发性崩溃,一直找不到原因很纠结,看我在这一块非常有经验让我帮忙看一下怎么回事,既然是有备而来自然dump也准备好

[Winform]在Form里显示模态对话框ModalDialog
2024/5/27 11:37:58

在Fm里显示模态Dialog 问题 如何在WinFm的一个Fm里面弹出一个模态Dialog 背景 程序的框架是Winfm,只有一个窗口MainFm。MainFm里面是一个TabControl,每个TabPage是一个Fm,每个TabPage的Fm相互独立,互不干扰,TabPage间可以随时切换。由于有某些需求,TabPage需要接受用户输入,并等待输入完成,才能执行后面的代码,此时,程序是需要阻塞等待输入的,所以需要弹出一个模态Dialog。为什么不用MessageBox呢?因为MessageBox是直接

定制JSON转换:探索.NET Core中JsonSerializerOptions的秘密
2024/5/27 11:37:57

概述:在. Ce中,通过JsonSerializerOptions的JsonConverter参数,我们能够定制化JSON序列化和反序列化过程。通过自定义JsonConverter,如DateTimeConverter和IntConverter,我们能够灵活处理特定类型的转换逻辑,提供更多控制权。这为开发者提供了强大的工具,使得JSON数据与.对象之间的转换更加灵活、精确。 在. Ce中,JsonSerializerOptions是一个用于配置System.Text.Json.JsonSerializer

.NET Moq mock internal类型
2024/5/27 11:37:55

问题 Can not create proxy f type xxx because type xxx is not accessible. Make it public internal mark your assembly with [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2 PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547

浅谈WPF之ToolTip工具提示
2024/5/27 11:37:55

在日常应用中,当鼠标放置在某些控件上时,都会有相应的信息提示,从软件易用性上来说,这是一个非常友好的功能设计。那在WPF中,如何进行控件信息提示呢?这就是本文需要介绍的ToolTip【工具提示】内容,本文以一些简单的小例子,简述如何在WPF开发中,应用工具提示,仅供学习分享使用,如有不足之处,还请指正。 什么是工具提示? 工具提示是一个小型的弹出窗口,在用户将鼠标指针悬停在某个元素(如 Button)上时显示。当用户将鼠标指针移动到具有工具提示的元素上时,将在一段指定的时间内显示一个包含工具提示内容

不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你
2024/5/27 11:37:54

EF Ce Code First 是什么 Code First 是 Entity Framewk Ce (简称 EF Ce) 的一种开发模式,它允许开发人员使用纯粹的代码来定义数据模型,通过它,可以极大地提高开发效率:使用 Code First 开发模式,你可以专注于定义领域模型和业务逻辑,而无需关注数据库的细节,能够更快地构建应用程序 Code First 是真正地面向对象的方式来定义数据模型,包括实体类、关系、继承等,这些都让数据模型的设计更加直观和易于理解 Code First 支持多种数据库,包括

Taurus .Net Core 微服务开源框架:Admin 插件【4-7】
2024/5/27 11:37:53

前言:继上篇:Taurus . Ce 微服务开源框架:Admin 插件【46】 配置管理Mvc【PluginDoc 接口测试及文档】 本篇继续介绍下一个内容: 系统配置节点:Mvc Plugin Metric 接口调用次数统计: 配置界面如下:1、Metric.IsEnable:配置当前接口统计插件是否可用 打开开关时,可以通过访问Metric菜单查看统计项: 2、Metric.IsIgnePluginUrl:配置是否统计后台插件管理请求数据 默认不统计。 3、Metric.IsDurable:配

Json Schema简介和Json Schema的高性能.net实现库 LateApexEarlySpeed.Json.Schema
2024/5/27 11:37:52

什么是Json Schema ? Json schema是一种声明式语言,它可以用来标识Json的结构,数据类型和数据的具体限制,它提供了描述期望Json结构的标准化方法。 利用Json Schema 你可以定义Json结构的各种规则,以便确定Json数据在各个子系统中交互传输时保持兼容和一致的格式。 一般来说,系统可以自己实现逻辑来判断当前json是否满足接口要求,比如是否某个字段存在,是否属性值是有效的。但当验证需求变得复杂后,比如有大量嵌套json结构,属性之间的复杂关联限制等等,则容易编写出考虑不

Asp.net core Webapi 如何执行定时任务?
2024/5/27 11:37:52

前言 在计算机系统中,定时执行一些后台任务是很常见的场景,比如定时发送邮件、备份数据等等。 那么,. 技术如何通过编程灵活地实现项目里复杂的自定义任务呢? 如果是 Windows 生态,通常来说,可以有这些方式:编写一个程序,通过 Windows 内置的任务计划来定时执行。 编写一个程序,通过 Windows 内置的 Services 来定时执行。 编写一个定时循环执行任务的程序,在 Windows 系统启动时配置为自动执行。 ……但是,如果是一个中小型的 Web 应用系统,这些方法方式就显得不太合适。A

在WInform开发中实现工具栏/菜单的动态呈现
2024/5/27 11:37:52

在Winfm系统开发中,为了对系统的工具栏菜单进行动态的控制,我们对系统的工具栏菜单进行动态配置,这样可以把系统的功能弹性发挥到极致。通过动态工具栏菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过权限分配的方式,可以更有效的管理系统的菜单分配到不同的角色用户,也就是插件化的处理方式。 1、动态菜单的控制 我们一般的应用系统里面,由于系统是面向不同类型的用户,我们所看到的菜单会越来越多,多一点的甚至上百个,但是我们实际工作接触的菜单可能就是那么几个,那么对于这种庞大的菜单体系,寻找起来非常不便。因

Taurus .Net Core 微服务开源框架:Admin 插件【4-5】
2024/5/27 11:37:50

前言: 继上篇:Taurus . Ce 微服务开源框架:Admin 插件【44】 配置管理Mvc【PluginCS 跨域】 本篇继续介绍下一个内容: 系统配置节点:Mvc Plugin Admin 后台界面: 配置界面如下: 配置说明如下: 1、Admin.IsEnable:配置当前后台插件是否可用 这是个很危险的开关:如果设置为 false,则需要重启应用后,才能重新进入后台。 如果设置还同时勾选了持久化,则重启也进不了后台。因此,需要知道持久化的目录: 默认在 App_Dataadminconf

码农的转型之路-这款轮子可以造吗?
2024/5/27 11:37:50

从昨天发表的《码农的转型之路多年以来的反思》收到了不少猿友的评论和关注,还有几个加了wx,给了很多正面的反馈。趁着热度还在:) 也有很多人不知道这个人要干嘛,索性今天正式介绍一下,但名字还没有想好,她应该是一款浏览器工具。 一、什么应用场景?1.CS开发大概是7年前当时公司接了一个区域品牌羊肉追溯项目,其核心是通过RFID的卡标识人(养殖户)、货(羊)、场(屠宰场)以防止洗澡羊冒充品牌羊,应用价值就不多说了。技术点包含RFID读写器控制、轨道秤的重量数据采集、信号灯控制、屠宰场温湿度采集、打印溯源标签以

记一次 .NET某工控 宇宙射线 导致程序崩溃分析
2024/5/27 11:37:49

一:背景 1. 讲故事 为什么要提 宇宙射线 太阳耀斑 导致的程序崩溃呢?主要是昨天在知乎上看了这篇文章:莫非我遇到了传说中的bug? ,由于 rip 中的0x41变成了0x61出现了bit位翻转导致程序崩溃,截图如下:下面的评论大多是说由于 宇宙射线,这个太玄乎了,说实话看到这个 传说bug 的提法,我还是挺兴奋的,毕竟在我的分析旅程中,我也是真的遇到过,这篇就拿出来给大家分享吧,当时百思不得其解,真的是无语死了。 这位朋友找到我的时候,说程序会出现偶发性崩溃,自己在网上也发了很多帖子来寻找答案,最后都

.NET 8最强新功能:键控服务依赖注入
2024/5/27 11:37:49

什么是键控服务依赖注入? 在之前的依赖注入中,服务是根据其类型进行注册和解析的。如果出现同一接口有多个实现怎么办呢?这时候就可以使用. 8的新功能“键控服务依赖注入”。它允许您注册接口的多个实现,每个实现都与一个唯一键相关联,然后基于该键解析所需的实现。 在. 8 中的实现 接下来介绍如何在APS. Ce中使用键控服务依赖注入。案例将准备一个接口,并且这个接口有两个类实现,最后使用键控服务依赖注入。步骤如下: 1、首先创建一个.8的ASP. Ce项目。这里选择Web API项目2、创建一个接口和两个类实现

深入理解WPF中的Dispatcher:优化UI操作的关键
2024/5/27 11:37:48

概述:Dispatcher是WPF中用于协调UI线程和非UI线程操作的关键类,通过消息循环机制确保UI元素的安全更新。常见用途包括异步任务中的UI更新和定时器操作。在实践中,需注意避免UI线程阻塞、死锁,并使用CheckAccess方法确保在正确的线程上执行操作。这有助于提升应用程序的性能和用户体验。 在WPF(Windows Presentation Foundation)中,Dispatcher 是一个重要的类,它主要用于处理与用户界面相关的操作。WPF的UI元素都有一个关联的Dispatcher,这