编程语言
.NET 进程内队列 Channel 的入门与应用
近期,博主为FakeRPC项目增加了WebSocket协议支持,利用全双工通信特性在一个连接中发送多条数据。考虑WebSocket协议是为了验证JSON-RPC的可行性,并为后续支持TCP/IP协议铺路。在实现FakeRPC过程中使用了.NET中的Channel数据结构来实现消息转发。Channel是.NET Core 3.0后推出的集合类型,主要应用于生产者-消费者模型。通过示例展示了Channel的应用,以及在FakeRPC中如何利用WebSocket协议实现双向通信。介绍了Channel的特性和在数据流处理中的应用,展示了其在性能方面的优势。通过实例展示了利用Channel实现数据流模式的过程。总结指出,过去的经历会影响认知,但持续学习新技术是必要的。
Channel
.NET
Queue
刺客信条
2022-09-15
编程语言
gRPC 流式传输极简入门指南
最近一直在研究 gRPC 的 ServerReflection,这是 gRPC 中提供的反射接口,对于动态调用 gRPC 接口非常有用。作者发现 ServerReflection API 使用了 gRPC 双向流的方式进行交互,类似于服务器推送技术如 WebSocket 和 Server-Sent Events。文章介绍了流式传输的概念,包括 HTTP/2 中的多路复用特性以及 gRPC 中的流式传输类型:客户端流、服务器端流和双向流。具体展示了这些流式传输类型在 gRPC 中的实现方式和对应的代码示例。最后,作者分享了对 gRPC 流式传输的兴趣和探索,强调了在工作中遇到的挑战和探索的乐趣。
gRPC
.NET
Streaming
教程
2022-02-18
数据存储
EFCore 实体命名约定库:EFCore.NamingConventions
在软件开发中,数据库是一个重要话题,有不同的流派,一些人支持手写SQL,另一些喜欢ORM。介绍了EFCore.NamingConventions库,可在EFCore中指定实体命名约束规则,简化属性与数据库表字段映射,提高团队效率。示例展示了使用SnakeCaseNamingConvention生成数据库表字段,强调约定大于配置的重要性。团队应记录数据库规范,以避免配置混乱或新人不了解约定。这个库有利于标准化命名,提高开发效率。
编程语言
ASP.NET Core gRPC 集成 Polly 实现优雅重试
在这篇博客中,作者探讨了在构建高可用微服务架构中的`gRPC`客户端重试方案。作者介绍了四种具体实现方式:基于`gRPC RetryPolicy`、基于`HttpClientFactory`、基于`gRPC拦截器`以及基于`CallInvoker`。其中,通过对`CallInvoker`的重写实现了灵活的重试策略,展示了一种更完美的解决方案。作者强调了在探索技术方案时,应先了解官方提供的标准方案,避免不必要的弯路。整体内容信息量丰富,分享了作者在探索重试方案过程中的思考和经验。
gRPC
Polly
重试
.NET
2021-06-07
编程语言
ASP.NET Core gRPC 拦截器的使用技巧分享
gRPC是微软在.NET Core中主推的RPC框架,具有跨语言、高性能、双向流式调用等优点。文章介绍了在.NET Core中使用gRPC拦截器实现日志记录的技巧,包括拦截器类的定义和各种调用方法的重写。通过拦截器实现了对gRPC请求和响应的详细日志记录。同时,展示了如何在服务器端和客户端实现拦截器,以及如何让拦截器生效的方法。文章总结了gRPC拦截器的使用技巧,强调了利用拦截器处理RPC服务调用时的统一处理需求。
.NET
gRPC
AOP
日志
2021-05-26
编程语言
从 C# 1.0 到 C# 9.0,历代 C# 语言特性一览
C# 版本历史记录涵盖了 C# 7.0、8.0 和 9.0 的语法特性。C# 7.0 引入了元组、更多的 expression-bodied 成员、out 变量、异步 Main 方法、模式匹配和引发表达式等特性。C# 8.0 带来了默认接口方法、异步流和索引和范围。而 C# 9.0 则包括了 Record、顶级语句和模式匹配增强等新特性,如`record`类型的引入、顶级语句简化和模式匹配语法的增强。
.NET
CSharp
语言
总结
2021-02-01
开发工具
基于 Docker 构建 .NET 持续集成环境
项目团队正努力实现持续集成(CI)和持续部署(CD),以提高自动化水平。目前,虽然基于 Docker 实现了自动化部署,但部署包的构建仍依赖人工,且每次版本更新需通过邮件通知相关人员。文章详细介绍了使用 Jenkins 和 Docker 实现项目自动化构建的过程,包括代码编译、单元测试、静态检查和版本发布等环节。介绍了在 Linux 环境下使用 MSBuild、Nuget、Sonar 和 NUnit 等工具的方法,并通过 Dockerfile 构建了整个 CI 环境。尽管项目最终因与 Windows 关联过深而放弃该方案,但文章为搭建私有 Linux 构建环境提供了宝贵经验。同时,作者对 DevOps 实践中的一些现象提出了批判和反思。
.NET
Docker
MSBuild
2018-06-12
编程语言
使用 Mono 打造轻量级的.NET 程序运行时
本文介绍了如何通过 Mono 实现 .NET 程序的跨平台运行,并探讨了搭建轻量级的 .NET 运行时的可能性。首先,文章讨论了 .NET 版本兼容问题,提出了通过应用程序配置文件中的supportedRuntime 节点来指定应用程序兼容的 .NET Framework 版本。随后,文章介绍了 Mono 运行时的搭建,包括必要的组件和目录结构,以及如何使用命令行或 Mono Embedding 方案来运行 .NET 程序。文中还提供了一个使用 C++ 模拟命令行执行 Mono 运行时的示例代码,并讨论了如何避免命令行窗口弹出的问题。最后,文章总结了使用 Mono 实现轻量级 .NET 运行环境的优势和存在的问题,以及可能的解决方案。
.NET
Mono
跨平台
Linux
2016-03-25
编程语言
使用 Mono 让.NET 程序跨平台运行
Unity3D引擎以其跨平台能力备受开发者青睐,跨平台开发对程序员而言至关重要。从Mono到Xamarin,介绍了.NET跨平台的原理和实现方式。探讨了Mono在实现.NET跨平台方面的作用,以及如何将.NET程序移植到Linux平台。讨论了.NET程序脱离.NET框架运行的可能性,重点在于解决基础类库的依赖问题。最后总结了跨平台开发的重要性和挑战,强调了编写跨平台代码的必要性。
跨平台
Mono
.NET
Linux
2016-03-06