在.NET中体验GraphQL

前言 以前需要提供Web服务接口的时候,除了标准的WEBAPI形式,还考虑了OData、GraphQL等形式,虽然实现思路上有很大的区别,但对使用方来说,都是将查询的主动权让渡给了前端,让调用方能够更加自由地发挥或者符合自己要求的数据。其中,OData作为传统REST WEBAPI的拓展,对外还是W ... »

C#脚本引擎RulesEngine

当编写应用程序时,经常性需要花费大量的时间与精力处理业务逻辑,往往业务逻辑的变化需要重构或者增加大量代码,对开发测试人员很不友好。 之前在这篇文章说过,可以使用脚本引擎来将我们需要经常变化的代码进行动态编译执行,自由度非常大,不过对应的需要资源也多。如果只是针对非常具体业务逻辑的变化,可以尝试使用R ... »

武装你的WEBAPI-OData常见问题

本文属于OData系列 目录 武装你的WEBAPI-OData入门 武装你的WEBAPI-OData便捷查询 武装你的WEBAPI-OData分页查询 武装你的WEBAPI-OData资源更新Delta 武装你的WEBAPI-OData之EDM 武装你的WEBAPI-OData使用Endpoint ... »

C#使用struct直接转换下位机数据

编写上位机与下位机通信的时候,涉及到协议的转换,比较多会使用到二进制。传统的方法,是将数据整体获取到byte数组中,然后逐字节对数据进行解析。这样操作工作量比较大,对于较长数据段更容易计算位置出错。 其实,对于下位机给出通讯的数据结构的情况下,可以直接使用C#的struct将数据直接转换。需要使用到 ... »

串口使用Pipeline时诡异的ReadOnlySequence问题

借鉴之前的Pipeline的操作方式,现在目标是给串口读取操作也使用上Pipeline。稍微改造一下,以下代码可以直接运行。 协议为使用连续的4个0XFF作为结尾,没有头标志。数据总长为68位定长。 我需要判断从开始到选定位置是否长度足够,这里面用来判断segment长度我用了这个方式。 buffe ... »

博客园写作利器MarkWord

很多年以前开始使用markdown写博客的时候,当时博客园的web编辑器还不是那么好用,就特别想有一个优秀的编辑器可以直接发布到博客园的。偶然间发现一个非常好用的MarkWord,可以实现markdown本地编辑后发布到远程的功能,重点是实时预览、图片可以直接Ctrl+C Ctrl+V,写作的过程简 ... »

使用swagger上传文件

经常使用swagger,可以通过设置[ProducesResponseType]标记接口的返回信息;swagger也能通过接口的参数列表,自动获得发送的数据结构信息。 不过有一个例外,就是上传文件的时候,设置了[Consumes]的内容为multi-part/form-data,但是swagger并 ... »

C#脚本引擎CS-Script

最近想要在程序中嵌入一个C#脚本引擎,在.NET Framework时代用过一个叫做CS-Script的东西,感觉还是不错,发现现在也支持.NET Core了,试着嵌入一下。 比较 要说能够运行C#脚本的解决方案,有Roslyn和Mono,与他们相比,CS-Script能够提供的封装更为高级,它底层 ... »

Protobuf简单类型直接反序列化方法

我有一个想法,想实现一个能够进行跨平台的高性能数据协议规范,能够让数据在两个不同的程序之间进行读取,最好能够支持直接将object序列化,那就完美了。 目标 支持任意Object序列化 支持从类似System.String的字符串中获取类的信息并进行反序列化 支持简单对象的直接序列化与反序列化 方案 ... »

琢磨一下程序集引用不匹配的问题

进行插件式编程的时候,经常性地弹出这么个东西找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040),往往这种问题特别难以解决,搞定了一个还要出另外一个。得研究一下怎么处理。 引用不匹配 这里提示需要加载一个4.2.0.0版本的dll,我先看看文件夹下面有没有对应 ... »

打造跨平台.NET Core后台服务

续之前讲的在TopShelf上部署ASP.NET Core程序,作为后台服务运行,自从.NET Core 3.0出现以后,出现了自带的Generic Host,使得自托管服务变为可能。这种方式和TopShelf方式一样,可以直接F5进行服务的调试,也为跨平台后台服务编写提供了一种新的方案。 创建服务 ... »

使用命名管道承载gRPC

最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计 刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解决所有问题吗?不见得,先看看他的优点: gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。gRPC的主要优点是: 现代高性能轻量级 RPC 框 ... »

C#状态机Stateless

最近在折腾一些控制相关的软件设计,想起来状态机这个东西,对解决一些控制系统状态切换还是挺有用的。 状态机(有限状态自动机)网上有很多介绍。简单理解就是定义一系列状态,通过一系列的事件,可以使得状态可以相互之间切换。 如果不使用状态机的思想来编程,那么针对过程的编程方法会使得程序拓展性变差,并且不容易 ... »

OData武装你的WEBAPI-分页查询

本文属于OData系列 目录 "武装你的WEBAPI OData入门" "武装你的WEBAPI OData便捷查询" "武装你的WEBAPI OData分页查询" 武装你的WEBAPI OData资源更新 武装你的WEBAPI OData之EDM 武装你的WEBAPI OData常见问题 武装你的W ... »

RESTful设计中的常见疑问

最近写了几个有关RESTful的API相关内容,也谈谈对常见问题的自己的理解。 什么是RESTful 详情可以看 "http://www.ruanyifeng.com/blog/2011/09/restful.html" 。 简单可以这么理解,使用 去代表资源,使用HTTP VERB(GET PUT ... »

武装你的WEBAPI-OData便捷查询

本文属于OData系列 目录(可能会有后续修改) "武装你的WEBAPI OData入门" "武装你的WEBAPI OData便捷查询" 武装你的WEBAPI OData分页查询 武装你的WEBAPI OData资源更新 武装你的WEBAPI OData之EDM 武装你的WEBAPI OData格式 ... »

武装你的WEBAPI-OData入门

本文属于OData系列 目录(可能会有后续修改) 武装你的WEBAPI OData入门 武装你的WEBAPI OData便捷查询 武装你的WEBAPI OData分页查询 武装你的WEBAPI OData资源更新 武装你的WEBAPI OData之EDM 武装你的WEBAPI OData格式转换 武 ... »

阿里云函数计算上部署.NET Core 3.1

使用阿里云ECS或者其他常见的VPS服务部署应用的时候,需要手动配置环境,并且监测ECS的行为,做补丁之类的,搞得有点复杂。好在很多云厂商(阿里云、Azure等)提供了Serverless服务,借助于Serverless,开发人员可以更加专注于代码的开发,减少运维的成本。 Azure的部署直接集成在 ... »

迁移WPF项目到.NET CORE

综述 .NET CORE 3.0开始,桌面端支持WPF了。很多.NET FRAMEWORK的项目已经跑了一阵子了,不是很有必要支持.NET CORE,不过最近用一个程序,为了贯彻一些C 8的特性,需要升级项目到.NET CORE 3.1。 方法 参考 "官方指导" ,需要这么几步: 1. 了解并更新 ... »