使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:公众号后台系统和数据都基本准备妥当了,可以来分享下我是如何开发本微信公众号的后台系统了。

首先说说我对公众号后台的简单需求:

  • 读者可以方便的获取历史文章
  • 可以通过关键字查找文章
  • 可以通过发表日期查找文章

基于这样的需求,也基于我的公众号可用的接口(由于是没有微信认证的订阅号,可用接口少得可怜),故设计了如下的实现方案:

  • 后台用一个数据源保存所有文章的信息,具体的字段包含了微信自动回复所需要的必要字段(标题、描述、封面图片Url,文章Url),信息需要手动填入(如果接口权限够,其实可以自动读取的)。
  • 实现一系列命令行,来回应用户的输入。即定义特定的命令,解析命令,查询数据源,并回复内容。回复的内容可以是文本也可以是文章列表。

在有了需求和方案想法后,就是具体实现了。在考虑了几种技术选型后,最终还是决定用ASP.NET MVC、Entity Framework、Azure这样的方案来实现(主要是我时间不多,只能选择轻车熟路的技术路线)。然后在研究了几种.NET的微信后台SDK后,选择了一个由国内Rabbit团队刚刚开源的一个SDK作为基础。

这个SDK虽然版本还比较低,但是整个架构设计的很不错,对微信的API封装的很好,基于它进行微信后台开发就很容易。不过为了方便,我Fork了这个项目,也做了一些调整(使用的.NET运行时改为4.5,去掉一些多余的Nuget包,也把Nuget包升级到最新)。我的地址在:https://github.com/heavenwing/WeiXinSDK

下面就简单介绍一下我基于Rabbit WeixinSDK的实现,这个也算是Rabbit WeixinSDK的简单教程。

  1. 新建一个ASP.NET MVC 5的项目
  2. 引用EntityFramework.SqlServerCompact,因为我们打算在本地调试和Staging环境中使用SQL Server Compact(避免使用Azure SQL Database带来的额外费用)
  3. 创建文章信息的数据模型(Article)和DbContext。
  4. 使用VS提供的脚手架来创建一个MVC 5 Controller with views, using Entity Framework(ArticlesController),这样你马上就可以对文章信息进行管理(无需编写任何代码)。我给这个Controller加上了[Authorize],以便我登录后才能管理内容。
  5. 克隆Rabbit WeixinSDK最新的代码,通过项目引用它。暂时不要用Nuget来引用,因为Nuget的版本比代码低(我一开始就是这样,结果遇到一些问题)。
  6. 创建一个MessageHandlerMiddleware(CommandMessageHandlerMiddleware)来包含你需要响应微信post内容的动作,包括事件、文本输入等。注意只能有一个,因为一开始我以为可以把不同的处理事件放到不同的MessageHandlerMiddleware中,结果无法正常得到返回消息。
  7. 创建一个微信接口用的空Controller(WeChatController),提供两个Action,一个通过HttpGet用于验证接口,一个通过HttpPost用于消息的收发。根据Rabbit WeixinSDK的规范,把CommandMessageHandlerMiddleware注册到HandlerBuilder中(在IgnoreRepeatMessageHandlerMiddleware之后,GenerateResponseXmlHandlerMiddleware之前)。注意和Rabbit WeixinSDK原示例不同的地方是要对Action异步化。
  8. 在Azure中创建两个Web App分别用于测试站点和生产站点。(我选择的是一个免费用于测试、一个共享用于生产)。导出他们的发布配置,导入到VS中用于发布。
  9. 为了本地调试和Staging用SQL Compact,生产用SQL Server,我创建了两个连接字符串,名称分别为"wechat_sqldb"和"wechat_sqlcompactdb",通过条件编译来改变DbContext对连接字符串的使用,从而非常容易的达到数据库自由切换。
  10. 然后分别发布测试站点和生产站点后,到Azure后台的应用配置中,根据情况填写web.config中AppSettings中的配置。比如我的测试站点的wx:AppId和wx:AppSecret就填写的是“微信公众平台接口测试帐号”的信息,生产站点才是填写的真正内容。同理,ida:ClientId也可以分别填写。这种部署和配置方式既方便了调试,又隔离了数据。
  11. 在手机上分别对测试站点和生产站点进行实际用户验收测试。到此,使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台的工作就完成了。

我的这个后台系统已经开源在GitHub上,供大家参考和交流:https://github.com/heavenwing/MyWeChatPublic

当然,我的后台系统的功能还有待进一步完善,有任何使用问题欢迎和我交流。如果你也想用这个项目给自己的公众号上一套后台,遇到技术问题也欢迎和我交流。

时间: 2024-11-07 22:01:33

使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台的相关文章

[转]ASP.NET MVC 5 学习教程:快速入门

本教程将使用Visual Studio 2013手把手教你构建一个入门的ASP.NET MVC5 Web应用程序.本教程配套的C#源码工程可通过如下网址下载:C#版本源码链接.同时,请查阅 Building the Chapter Downloads 来完成编译源码和配置数据库. 在本教程中的源码工程,您可在Visual Studio中运行MVC 5应用程序.您也可以使Web应用程序部署到一个托管服务提供商上.微软提供免费的网络托管多达10个网站,free Windows Azure trial

ASP.NET MVC Display Mode 移动端视图 配置对微信内置浏览器的识别

最近在捣鼓一个稍微有点low的商城网站,没有计划做app却要求有个wap版,而前端又没有做成响应式,时间WTF,直接利用了asp.net mvc的Display Mode Provider. 使用方式依照上面的链接地址,asp.net mvc application启动的时候会在全局变量 DisplayModeProvider.Instance.Modes 集合中加入 DisplayModeId == "Mobile" 的 IDisplayMode ,因此如果想要在移动端浏览器中展示移

分享技术:基于ASP.NET MVC+漂亮UIBootstrap的敏捷开发框架开发随笔一

公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个敏捷开发框架. 我们主要的业务是做OA.CRM.ERP一类的管理系统,一个通用的后台搭出来,再配合一些快速开发的组件开发效率能提高很多. 另外老板一再强调要支持APP开发,一次开发能部署到安卓和IOS上. 作为开篇之作,先介绍一下该框架的功能点及技术点,后续的文章再按功能详细讲解. 献上<在线体验Demo地址>希望大家也能从中得到一些启发. 体验地址:http://www.learun.cn/adms/index.html 

【转】如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之工作流开发随笔三

前言 "厂长,APP的那几个功能都差不多了,接下来要做工作流,工作流这东西我完全没概念啊." "查尔斯,一般来说工作流就是指将指定的数据.文件.任务按照预定的规则进行传递流转.比如说你要请假,拿个请假条先让我审核,审核完了再让人事审核,人事审完流程就算走完了." "那我们需要做些什么东西呢?" "还是接着我刚刚的例子来说,首先是请假条,这个请假条就是数据的载体." "明白了厂长,那我做一个页面,把请假条的做出来.&q

asp.net mvc 配合前端js的CMD模块化部署思想,小思路

1)布局视图,用于协调普通视图和共享视图,实现js库自由选择引用 @{ //具体页面定义好需要引入的js文件,在这里通过共享视图渲染出来 var jsDefines = ViewBag.JsDefines as List<string>; if (jsDefines != null) { Html.RenderPartial("_JsDefines", jsDefines); } } 2)具体普通视图,可以自由选择引入哪些js库引用 @model List<strin

如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之工作流开发随笔三

前言 “厂长,APP的那几个功能都差不多了,接下来要做工作流,工作流这东西我完全没概念啊.” “查尔斯,一般来说工作流就是指将指定的数据.文件.任务按照预定的规则进行传递流转.比如说你要请假,拿个请假条先让我审核,审核完了再让人事审核,人事审完流程就算走完了.” “那我们需要做些什么东西呢?” “还是接着我刚刚的例子来说,首先是请假条,这个请假条就是数据的载体.” “明白了厂长,那我做一个页面,把请假条的做出来.” “傻X,那还有请款单.请购单.借支单...你都一个个去做?而且用户需要自己再修改

ASP.NET MVC 03 - 安装MVC5并创建第一个应用程序

不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的.(开个小玩笑.哈哈.) 参考书籍:<ASP.NET MVC 4 Web编程>.<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业及应用>.度娘谷歌等. -= 安

[转]ASP.NET MVC 4 最佳实践宝典

原文:http://www.cnblogs.com/sonykings/archive/2013/05/30/3107531.html ASP.NET MVC最佳实践 本文档提供了一套旨在帮助创建最佳优化ASP.NET MVC应用程序的 开发人员编码准则. 当然,由您来选择这些优化准则. 模型的建议 Model是定义业务领域相关的对象,应该包含业务逻辑(对象如何动作和关联),验证逻辑(验证对象的有效值),数据逻辑(数据对象如何持久化),和会话逻辑(跟踪用户状态). 创建独立的Model项目,在A

[ASP.NET MVC] 使用Bootstrap套件

[ASP.NET MVC] 使用Bootstrap套件 前言 在开发Web项目的时候,除了一些天赋异禀的开发人员之外,大多数的开发人员应该都跟我一样,对于如何建构出「美观」的用户接口而感到困扰.这时除了,加入美术人员这个选项之外,开发人员也可以自立自强,为Web项目内加入Bootstrap套件.透过使用Bootstrap套件中各种设计精美的样式.组件,来让Web项目的用户接口更加的美观大气,增加客户对于项目产出的好感度.本篇文章介绍如何在Web项目里使用Bootstrap套件,为自己留个纪录也希