摘要:
在微服务架构的部署拓扑中,比较常见的做法是将身份认证中心(Identity Authority)与其它的微服务一起,置于API Gateway之后,由API Gateway提供统一的端点供客户端程序访问。本文介绍如何将IdentityServer4配置在nginx之后,通过nginx为Blazor 阅读全文
摘要:
从C# 9开始,引入了init关键字,其目的是确保类中的属性(property)仅在对象被构造的时候才允许被赋值,听起来好像与C# 6中的自动属性构造函数初始化(auto-property constructor initialization)的方式有些类似,但由init定义的类属性,允许在调用方初 阅读全文
摘要:
正在运行《太空拦截》游戏的Telmac 1800微型计算机 CHIP-8是上世纪70年代(1970)中期,由RCA Labs的工程师Joe Weisbecker开发的一套解释型编程语言,它被用于COSMAC VIP和Telmac 1800 8位微型计算机上。CHIP-8程序需要在CHIP-8虚拟机上 阅读全文
摘要:
本文标题有点难懂,不过我也实在是想不出什么更好的标题了,就请大家研读文章内容吧。最近在审核代码中发现一个有趣的现象,就是在C#中,如果我启用了Nullable Reference Type的功能,并且定义了下面这个扩展方法: static class Extensions { public stat 阅读全文
摘要:
ASP.NET Core Blazor 应用程序分两种:一种是需要依赖于后台宿主进程的Server App,另一种是直接在浏览器中运行的WebAssembly。WebAssembly是纯前端的,其中内嵌了一个微小版的.NET运行时,一次加载之后,整个WebAssembly就可以在浏览器进程中,通过内 阅读全文
摘要:
是否需要将IdentityServer置于Ocelot API网关之后,由Ocelot API网关对其进行保护,需要看具体的架构需求。在微软官方的eShopOnContainers架构案例中,由于根据不同的业务需求,设置了多个Ocelot API网关,因此,这个案例并没有将IdentityServe 阅读全文
摘要:
在《再谈使用IdentityServer实现ASP.NET Core Web API的认证与授权》一文中,我又重新总结了IdentityServer中ApiScope和ApiResource的用法,通过对两者的设置,实现了基于Claim的API授权。今天,我们更进一步,引入Ocelot API网关,... 阅读全文
摘要:
在《使用Ocelot、IdentityServer4、Spring Cloud Eureka搭建微服务网关:Step by Step(一)》一文中,我曾经介绍了如何使用IdentityServer4对ASP.NET Core Web API的访问进行身份认证与授权。本文将更加深入讨论有关ApiRes... 阅读全文
摘要:
小的时候就看到有同学使用C语言在DOS下做过一款俄罗斯方块的游戏,当时是启用了DOS的图形化模式,感觉也挺有意思。最近上海疫情封控在家,周末也稍微有点空余时间,于是使用Visual Studio 2019,C# 9.0配合MonoGame 3.8,自己也写了一个俄罗斯方块的游戏,效果如下: 当然,光 阅读全文
摘要:
这两天在整理两年前写的一个打字练习的小游戏的代码,发现其中有个写法挺有意思:private IEnumerable LetterSprites => from p in this where p is LetterSprite select p as LetterSprite;这段代码的意思是,... 阅读全文
摘要:
从容器启动复制下面的YAML然后保存成docker-compose.yaml文件:---version: '3'services: zookeeper: image: confluentinc/cp-zookeeper:7.0.1 container_name: zookeeper ... 阅读全文
摘要:
最近在工作中发现一个莫名其妙的Bug,考察下面的代码:var baseUrl = "https://test.example.com/";var loginUrl = $"{baseUrl}sso-auth/login";var userInfoUrl = $"{baseUrl}sso-auth/u... 阅读全文
摘要:
在服务端应用程序中,我们往往会通过事务处理来保证数据一致性(Data Consistency),例如:当用户从库存中取走了一定数量的物品,这些物品会体现在用户的提货单上,与此同时,库存中物品的数量也应该减少。如果在这个过程中无法保证数据的一致性,那么就有可能出现用户没有成功取走物品,而库存中的物品数... 阅读全文
摘要:
协变(Covariance)与逆变(Contravariance)是Visual C# 4.0中引入的一个语言特性,目的是为了强化在泛型类型上继承关系的语义的合理性。举个非常简单的例子:爬行动物和哺乳动物都继承于动物,然后你不能将爬行动物的行为赋予动物类型,因为这种动物类型有可能是哺乳动物,它不具备... 阅读全文
摘要:
ASP.NET Core的认证与授权已经不是什么新鲜事了,微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍。但有时候在开发过程中,我们也往往会感觉无从下手,或者由于一开始没有进行认证授权机制的设计与规划,使得后期出现一些混乱的情况。这里我就尝试结合一个实际的例子... 阅读全文
摘要:
微软将于北京时间11月9日凌晨00:30(太平洋时间11月8日早上8:30分)发布Visual Studio 2022,这里简单介绍一下它的新特性吧。性能方面 VS 2022完全64位版本:能够快速加载世界上最复杂的软件项目解决方案 在大型解决方案项目中查找文件速度为原来的3倍开发者体验 强化... 阅读全文
摘要:
何时使用领域驱动设计?其实当你的应用程序架构设计是面向业务的时候,你已经开始使用领域驱动设计了。领域驱动设计既不是架构风格(Architecture Style),也不是架构模式(Architecture Pattern),它也不是一种软件开发方法论,所以,是否应该使用领域驱动设计,以及什么时候使用 阅读全文
摘要:
在大数据处理和人工智能时代,数据工厂(Data Factory)无疑是一个非常重要的大数据处理平台。市面上也有成熟的相关产品,比如Azure Data Factory,不仅功能强大,而且依托微软的云计算平台Azure,为大数据处理提供了强大的计算能力,让大数据处理变得更为稳定高效。由于工作中我的项目 阅读全文
摘要:
Visual C# 8.0中引入了可空引用类型(Nullable reference type),通过编译器提供的强大功能,帮助开发人员尽可能地规避由空引用带来的代码问题。这里我大致介绍一下可空引用类型的基本内容。 刚开始接触这个语言特性的时候,可能会不太容易理解。引用类型本来不就是可以为空(nul 阅读全文
摘要:
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernetes的ASP.NET Core MVC的应用程序中使用Rook-Ceph所创建的存储对象。 构建ASP.NET C 阅读全文