- 博客(101)
- 资源 (10)
- 收藏
- 关注
原创 C#使用 AutoUpdater.NET 实现程序自动更新
开发桌面应用程序的时候,经常会因为新增功能需求或修复已知问题,要求客户更新应用程序,为了更好的服务客户,通常会在程序启动时判断版本变更情况,如发现新版本则自动弹出更新对话框,提醒客户更新成最新版本。在.Net体系中采用 AutoUpdater.NET 组件可以非常便捷的实现这一功能。
2024-02-19 23:32:10
2648
原创 .NET Core 实现 JWT 认证
JWT(JSON Web Token)是一种开放标准, 由三部分组成,分别是Header、Payload和Signature,它以 JSON 对象的方式在各方之间安全地传输信息。通俗的说,就是通过数字签名算法生产一个字符串,然后在网络请求的中被携带到服务端进行身份认证,功能上来说和 SessionId 认证方式很像。在.Net Core 中使用JWT 可以通过 NuGet 获取 Microsoft.AspNetCore.Authentication.JwtBearer 包。
2024-02-07 23:05:38
2089
原创 用keytool 生成JWT的RSA非对称密钥
JWT 令牌可以由X.509 证书或 256 位非对称密钥签名来充当,为了获得合法的JWT 令牌,我们可以使用JDK中的keytool.exe工具来生成
2024-02-07 21:14:21
532
原创 ASP.NET Core 预防开放式重定向攻击
为预防钓鱼网站的常用套路,在进行 Web 应用程序的开发时,原则上应该将所有由用户提交的数据视为不可信。如果应用程序中包含了基于 URL 内容重定向的功能,需要确保这种类型的重定向操作只能在应用本地完成,或者明确判断其重定向到的是已知 URL,绝不能是 querystring 中可能包含的任何 URL。在 ASP.NET Core 的 MVC基类中就提供了两种判断是否为本地URL的方法,这边做个记录;两个方法分别为:LocalRedirect 和 IsLocalUrl。
2024-02-04 23:50:35
893
原创 ASP.NET Core 自定义解压缩提供程序
在了解ASP.NET Core 自定义请求解压缩中间件的应用时,依据官方文档操作下来碰到了几个问题,这边做个记录。
2024-02-03 23:41:31
655
原创 在本机搭建私有NuGet服务器
有时我们不想对外公开源码,同时又想在VisualStudio中通过Nuget包管理器来统一管理这些内部动态库,这时就可以在本地搭建一个NuGet服务器。
2024-02-01 23:11:26
1100
1
原创 配置支持 OpenAPI 的 ASP.NET Core 应用
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。本文记录如何配置基于Swagger的 ASP.NET Core 应用程序的 OpenAPI 规范。需要从NuGet 安装 Swashbuckle.AspNetCore 包。
2024-01-31 23:41:56
961
原创 ASP.NET Core 使用 SignalR 的简单示例
ASP.NET SignalR 是一个开源代码库,简化了Web实时通讯方案,可以实时地通过服务端将信息同步推送到各个客户端,可应用于需要从服务器进行高频更新的应用:包括游戏、社交网络、投票、拍卖、地图和GPS应用;仪表盘和监视应用:包括公司仪表板、即时销售更新或旅行报警;协同类应用:包括白板应用和团队会议软件;通知应用:社交网络、电子邮件、聊天、游戏、旅行报警和其他应用都需要使用的通知。
2024-01-30 22:52:09
1052
原创 C# 使用WMI监听进程的启动和关闭
Windows Management Instrumentation(WMI)是用于管理基于 Windows 操作系统的数据和操作的基础结构。具体的API可以查看。WMIC 是WMI的命令行管理工具,使用 WMIC,不但可以管理本地计算机,还可以管理同一Windows域内的所有远程计算机(需要必要的权限),而被管理的远程计算机可以不预先安装WMIC,只需要支持WMI即可。
2024-01-29 23:13:27
934
原创 ASP.NET Core gRPC 应用配置 gRPC-Web 协议
本文介绍如何配置现有 ASP.NET Core gRPC 服务,以便使用 gRPC-Web 协议的浏览器应用也可调用。配置 gRPC-Web 后将允许浏览器中的JavaScript 和 Blazor 应用调用 gRPC 服务。在上一篇的基础上,给服务端和客户端分别安装拓展包,Grpc.AspNetCore.Web。
2024-01-28 14:53:39
673
原创 C# 实现 gRPC 服务和调用
gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架。主要优点如下:1.高性能轻量化。2.协议优先的 API 定义模式,默认使用协议缓冲区,允许与语言无关的实现。3.可用于多种语言的工具,以生成强类型服务器和客户端。4.支持客户端、服务器和双向流式处理调用。5.使用 Protobuf 二进制序列化减少对网络的使用。gRPC 服务可以托管在 ASP.NET Core 上。这些服务与日志记录、依赖关系注入 (DI)、身份验证和授权等 ASP.NET Core 功能完全集成。
2024-01-28 00:36:29
1546
原创 SuperSocket 一个轻量级可扩展 Socket 开发框架
不用多说这是迄今为止用过最好用的.Net领域Socket开发框架,从Photon 脱坑之后,一直用它来搭建游戏服务器,相伴多年经历了多个游戏和工控项目的检验,简单易上手,功能应有尽有,强烈推荐。可以通过NuGet进行安装。
2024-01-27 00:22:26
603
原创 C# 使用AutoMapper实现类映射
AutoMapper是一个用于.NET中简化类之间的映射的扩展库;可以在执行对象映射的过程,省去的繁琐转换代码,实现了对DTO的快速装配,有效的减少了代码量。通过NuGet安装,AutoMapper, 由于本例用到了DI,所以需要顺便安装一下 AutoMapper.Extensions.Microsoft.DependencyInjection。
2024-01-25 23:29:07
834
原创 .NET 跨平台图形库 SkiaSharp 基础应用
SkiaSharp 是适用于 .NET 和 C# 的 2D 图形系统,由开源 Skia 图形引擎提供支持,在 Google 产品中广泛使用。可以在应用程序中使用 SkiaSharp Xamarin.Forms 绘制 2D 矢量图形、位图和文本。支持跨平台,Windows、Linux、Anroid、IOS、WebAssembly下都可以使用,底层源码是用C++实现的。SkiaSharp 最初由 Mono 开发,目前由 Microsoft 维护,遵循 MIT License。
2024-01-24 22:18:37
1374
原创 C# 使用屏障来使多线程并发操作保持同步
以下是微软官方对屏障类的介绍,System.Threading.Barrier 可用来作为实现并发同步操作的基本单元,让多个线程(参与者)分阶段并行处理目标算法。在达到代码中的屏障点之前,每个参与者将继续执行,屏障表示工作阶段的末尾;单个参与者到达屏障后将被阻止,直至所有参与者都已达到同一障碍。所有参与者都已达到屏障后,你可以选择调用阶段后操作。此阶段后操作可由单线程用于执行操作,而所有其他线程仍被阻止。执行此操作后,所有参与者将不受阻止,继续执行直到满足退出条件。
2024-01-23 23:35:04
632
原创 C# 使用System.Threading.Timer 实现计时器
以往一般都是用 System.Timers.Timer 来做计时器,而 System.Threading.Timer 也可以实现计时器功能,并且还可以配置首次执行间隔,在功能上比System.Timers.Timer更加丰富;根据这个特性就可以实现按指定时间间隔对委托进行单次调用。执行的回调委托也是在 ThreadPool 线程上执行,支持多线程运行环境。
2024-01-22 22:27:51
863
原创 .NET 资源监视
在 Microsoft.Extensions.Diagnostics.ResourceMonitoring 包提供了一系列定制 API,专用于监视 .NET 应用程序的资源利用率。为了让控制台输出的样式更美观,可以安装一下Spectre.Console这个包本例主要通过 IResourceMonitor 来获取资源状态信息,该接口支持检索与 CPU 和内存使用情况相关的数据,并且当前与 Windows 和 Linux 平台兼容。
2024-01-21 20:12:58
809
原创 使用.NET API 中的 EventCounters进行指标监控
为了实现轻量级、跨平台、准确实时的性能指标收集,从 .NET Core 3.0 版本开始引入 EventCounters API。除了 .NET 运行时提供的 EventCounters 外,还可以实现自定义的 EventCounters。以便跟踪各种指标,EventCounters 作为 EventSource 的一部分,可以实时自动定期推送到侦听器工具。
2024-01-20 15:56:01
570
原创 ASP.NET Core 对象池化技术
Microsoft.Extensions.ObjectPool 是 ASP.NET Core 基础结构的一部分,当对象的初始化成本较高,并且可能被频繁使用时,才适合采用对象池技术;被ObjectPool管理的对象不会进入垃圾回收,使用时通过由实例对象实现的Get()方法,从对象池中借出对象,用完之后调用Return(T obj)方法,将对象还回去。也可以在Return(T obj)方法中设置判断条件,仅允许特定的对象进入对象池。
2024-01-19 23:37:33
1337
原创 如何在 ASP.NET Core 配置请求超时中间件
本文参考官方文档,使用Asp.net core 8.0 的最小API 模板项目,配置超时中间件。超时中间件可用于所有类型的ASP.NET Core应用:最小 API、带控制器的 Web API、MVC 和 Razor Pages。请求超时的属性位于命名空间 Microsoft.AspNetCore.Http.Timeouts 中。需要注意的是,当应用在调试模式下运行时,超时中间件不会触发。要测试超时,请运行未附加调试器的应用。
2024-01-18 23:47:02
739
原创 .NET 弹性和瞬时处理库Polly
Polly 是一个 .NET 弹性和瞬态故障处理库,允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略。
2024-01-17 23:51:51
780
原创 C# 面向切面编程之AspectCore实践(二)
在上一篇中对AspectCore进行了初步的了解,用于拦截的属性加在了具体类的方法上。这一篇验证一下把拦截属性加在接口上,这样实现该接口的类中所对应的方法都会被拦截到;另外示例中还尝试对方法的入参进行了修改,验证了通过AspectContext可以获得当前方法的所有信息。
2024-01-16 23:18:10
467
原创 C# 面向切面编程之AspectCore初探
AspectCore 是Lemon名下的一个国产Aop框架,提供了一个全新的轻量级和模块化的Aop解决方案。面向切面也可以叫做代码拦截,分为静态和动态两种模式,AspectCore 可以实现动态代理,支持程序运行时在内存中“临时”生成 AOP 动态代理类。老规矩从 Nuget 安装包。
2024-01-15 23:20:30
524
原创 C# 静态代码织入AOP组件之肉夹馍
关于肉夹馍组件的官方介绍说明:Rougamo是一个静态代码织入的AOP组件,同为AOP组件较为常用的有Castle、Autofac、AspectCore等,与这些组件不同的是,这些组件基本都是通过动态代理+IoC的方式实现AOP,是运行时完成的,而Rougamo是编译时直接修改目标方法织入IL代码的。
2024-01-14 22:46:31
609
原创 如何将.NET 8.0的ASP.NET Core Web API部署成Windows服务
前面写了一篇关于的方法,其实真正的目的是为了探索如何将Asp.Net Core Web Api 部署成Windows 服务。基于上一篇的基础,只需把创建 WebApplication 的代码放到 BackgroundService 的ExecuteAsync方法中即可。其中比较重要的一个细节就是需要指定一下配置:});
2024-01-13 22:41:30
3060
原创 将.NET应用转换成Window服务
本文介绍了将.NET8.0应用程序转换成Windows服务。需要在NuGet中获取并安装:Microsoft.Extensions.Hosting.WindowsServices 包。
2024-01-12 23:56:55
797
原创 创建 SSL证书并应用于WebSocket
上一篇介绍如何使用Fleck创建WebSocket服务器,感觉不够完善,因为生产环境中肯定是需要用到ssl的,而创建或申请ssl证书,相对而言是比较繁琐的事情,特别是本地如果要构建一个使用ssl的测试环境时,就难免要多费一番周折了。
2024-01-11 23:33:01
3060
原创 C# 使用Fleck创建WebSocket服务器
Fleck 是 C# 实现的 WebSocket 服务器,通过 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后浏览器和服务器之间就形成了一条快速通道;两者之间就可以直接双工数据通讯,改变了原有的B/S模式。整个实现过程的代码非常简单,分为服务端和客户端两部分,服务端用控制台,客户端只有一个内嵌js的html文件。老规矩用NuGet安装Fleck类库。
2024-01-10 23:33:10
1048
原创 C# 在 .NET 中使用依赖注入
在 .NET 中使用依赖注入 (DI)。可以借助 Microsoft 扩展,通过添加服务并在 IServiceCollection 中配置这些服务来管理 DI。使用 IHost 接口来公开所有 IServiceProvider 实例,用来充当所有已注册的服务的容器。示例代码中使用了一个关键的枚举 ServiceLifetime 指定Scoped 服务只会随着新范围而改变,但在一个范围中是相同的实例。Singleton 服务总是相同的,新实例仅被创建一次。
2024-01-09 22:43:05
424
原创 了解ASP.NET Core 中的文件提供程序
ASP.NET Core 通过文件提供程序来抽象化文件系统访问。分为物理文件提供程序和清单嵌入的文件提供程序,其中PhysicalFileProvider 提供对物理文件系统的访问,而ManifestEmbeddedFileProvider 用于访问嵌入在程序集中的文件。
2024-01-08 23:13:41
668
原创 C# 关于反射的简单示例
在日常开发中,我们经常使用反射来动态获取关于类的信息,或者是动态给类实例成员赋值;反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
2024-01-07 23:41:59
761
原创 C# 使用命名管道进行网络进程间通信
使用 NamedPipeServerStream 和 NamedPipeClientStream 类,实现命名管道方式的网络通讯,支持跨网络和多个服务器实例的全双工通信、基于消息的通信以及客户端模拟;需要特别说明的是TokenImpersonationLevel 的四个枚举项,对应了 SecurityAnonymous、SecurityIdentification、SecurityImpersonation和SecurityDelegation,分别代表如下四种模拟的等级。匿名(
2024-01-06 12:36:03
1046
原创 C# 使用匿名管道进行本地进程间通信
相对于命名管道通讯方式而言,匿名管道开销更小,更轻松便捷;缺点就是无法进行网络通讯,只能在本机使用,应用场景相对狭窄;适合于本地多进程之间的通讯,比如主节点和多个从节点之间的交互。以下代码实现主要来自微软官网,实现了采用匿名管道将字符串从父进程发送到子进程的功能。
2024-01-05 23:43:31
657
原创 C# 使用Microsoft消息队列(MSMQ)
Microsoft Message Queuing (MSMQ) 是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。使用消息队列可以实现异步通讯,无需关心接收端是否在线,只需发出后就可以继续处理后续的任务,通讯双方也可以是不同的物理平台,该机制还可以用来实现故障恢复。
2024-01-04 23:22:28
1434
原创 C# 验证文件共享模式下的多线程文件写入
原以为设置了文件共享模式为允许随后写入(FileShare.Write),就可以实现多线程下的正常写入操作,实际情况是使用该模式后不会报线程独占问题,但是写入的内容是不完整的,比如开了n个线程,真正写入的内容不仅时序上不连续,且内容也不完整;还是需要额外加锁后才能保证时序及内容的完整性。如果实际应用的话,还是先塞到线程安全的队列中,再用独立线程来写入,来保证效率和一致性。
2024-01-03 23:22:25
687
原创 C# 使用读写锁控制多线程写入
当多个线程同时需要对一个文件进行写入操作时,可以使用System.Threading.ReaderWriterLockSlim对象,来对读写操作进行锁定处理,由于不同的 ReaderWriterLockSlim 对象,如果锁定的是同一个文件,也会被视为不同的锁进行管理,所以在使用是务必使用同一个ReaderWriterLockSlim 对象,比如可以做个单例或者直接声明为static变量。
2024-01-02 22:30:40
843
newtonsoft.json
2010-04-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人