【重要更新】Senparc.Weixin SDK v6.5 升级说明(支持 .NET Core 3.0 及分布式消息上下文)
Senparc.Weixin SDK v6.5 开始支持 .NET Core 3.0,并将微信消息上下文进行了大幅度的重构,支持了使用分布式缓存存储上下文信息,这意味着在分布式系统中,现在 Senparc.Weixin SDK 也能提供跨服务器的上下文消息共享。
当前的分布式上下文支持依赖了 NeuChar 提供的跨平台消息上下文解决方案,因此在公众号、小程序、企业微信中都已经默认支持此功能(开放平台接收的是系统推送,暂时没有必要支持)。
本次升级对应 Senparc.Weixin.dll:v6.5.0,Senparc.Weixin.MP.dll:v16.8.0。
一、升级
本次升级也带来了一些变化,如果您的系统是从旧版本升级到新版本,需要做一些修改或注意一些要点:列举如下:
1、相关模块中提供了 DefaultMessageContext:DefaultMpMessageContext、DefaultWxOpenMessageContext、DefaultWorkMessageContext。这是之前版本中,需要用户自定义 CustomMessageContext的默认实现。因此从现在开始,如果开发者不需要对上下文进行特殊的改写处理,使用 Senparc.Weixin 官方默认的规则,已经无需再创建 CustomMessageContext,可以直接这样定义 CustomMessageHandler:
using Senparc.Weixin.MP.MessageContexts;
//... public partial class CustomMessageHandler : MessageHandler<DefaultMpMessageContext>
{
//....
}
2、注意:您仍然可以使用先前定义的 CustomMessageContext,不过其中所包含的 CustomMessageContext_MessageContextRemoved() 方法将被忽略(因为系统无法收到缓存过期的通知)。这一点在技术上可以实现,只是在当前版本中暂未提供。解决的方法是使用一个外部的队列或者线程,严格同步缓存信息,并及时向系统广提示信号。
如果您已经创建了 CustomMessageContext,并希望继续使用它们,请将基类从原先的:
public class CustomMessageContext : MessageContext<IRequestMessageBase, IResponseMessageBase>
{ //...
}
变更为:
public class CustomMessageContext : DefaultMpMessageContext
{ //...
}
命名空间:Senparc.Weixin.MP.MessageContexts。
如果是小程序或企业微信,则将上述 DefaultMpMessageContext 改为 DefaultWxOpenMessageContext 或 DefaultWorkMessageContext。
3、RequestMessageFactory.GetRequestEntity() 方法现在要求提供上下文实例。
之前可以使用如下代码独立于 MessageHandler 生成一个 RequestMessage 对象:
var requestDoc = XDocument.Load(Request.InputStream);
var requestMessage = RequestMessageFactory.GetRequestEntity(requestDoc);
现在需要加入一个确定的上下文对象:
var requestDoc = XDocument.Load(Request.InputStream);
var requestMessage = RequestMessageFactory.GetRequestEntity(new DefaultMpMessageContext(), requestDoc);
当然,您也仍然可以使用自己定义的 CustomMessageContext。
4、原先的 MessageHandler 中提供了 GlobalWeixinContext 属性,用于在本地内存中储存所有的上下文信息,现在由于已经升级为分布式缓存,因此已经没有此对象。
在 MessageHandler 内部可以通过 base.GetCurrentMessageContext() 方法获取当前用户的上下文信息(示例),原先的 base.CurrentMessageContext 属性已经过期,请勿再使用。
注意:无论是已经过期的 GetCurrentMessageContext 属性还是新的 GetCurrentMessageContext() 方法,每次访问都会从缓存读取,这意味着如果你使用了分布式缓存,并且需要反复读取当前用户上下文信息,建议使用一个局部变量先读取出来,然后再处理,例如:
var currentMessageContext = base.GetCurrentMessageContext();
if (currentMessageContext.RequestMessages.Count > )
{
result.AppendFormat("您刚才还发送了如下消息({0}/{1}):\r\n", currentMessageContext.RequestMessages.Count,
currentMessageContext.StorageData);
for (int i = currentMessageContext.RequestMessages.Count - ; i >= ; i--)
{
var historyMessage = currentMessageContext.RequestMessages[i];
result.AppendFormat("{0} 【{1}】{2}\r\n",
historyMessage.CreateTime.ToString("HH:mm:ss"),
historyMessage.MsgType.ToString(),
(historyMessage is RequestMessageText)
? (historyMessage as RequestMessageText).Content
: "[非文字类型]"
);
}
result.AppendLine("\r\n");
}
如果需要在 MessageHandler 外部获取某个用户的上下文信息,则可以这样做:
//创建 GlobalMessageContext 对象
var globalMessageContext = new GlobalMessageContext<DefaultMpMessageContext, IRequestMessageBase, IResponseMessageBase>();
var openId = "<Your OpenId>";
var myMessageContext = globalMessageContext.GetMessageContext(openId);
二、新版本上下文架构及原理
将单独发布文章介绍相关信息,尽情期待!
【重要更新】Senparc.Weixin SDK v6.5 升级说明(支持 .NET Core 3.0 及分布式消息上下文)的更多相关文章
- 【重要更新】Senparc.Weixin SDK v4.4 升级说明
本次更新同时影响以下所有Senparc.Weixin相关版本的dll: Senparc.Weixin.dll 升级到 v4.4.2(重要) Senparc.Weixin.MP.dll 升级到 v13. ...
- Senparc.Weixin SDK 微信公众号 .NET 开发教程 索引
Senparc.WeixinSDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享.也欢迎大 ...
- 微服务架构 - Jimu(积木) 升级 1.0.0 支持 .Net Core 3.0
如果不知道 Jimu(积木) 是啥,请移步 .Net Core 分布式微服务框架介绍 - Jimu 这次升级除了支持 .Net Core 3.0 还新增部分功能,如 REST, 链路跟踪等,以下为详细 ...
- 【重要更新】Senparc.Weixin SDK v4.3.3升级说明
为了更好地适应微信越来越快的API更新速度和越来越多的API数量,本次Senparc.Weixin.dll v4.3.3对一些通用功能进行了深度的重构. 本次更新同时影响以下所有Senparc.Wei ...
- Senparc.Weixin SDK v5.0 升级公告
经过五年半的持续维护,Senparc.Weixin SDK 逐步丰满和完善,在升级的过程中,我们为基础库(Senparc.Weixin.dll)加入了许多通用的功能,例如加密/解密算法.通用缓存方法等 ...
- 利用Senparc.Weixin SDK 实现微信用户的授权,并获取信息
前一段时间在学校做过一个项目,就是利用的Senparc.Weixin SDK 做的,于是翻看以前代码,虽然有注释,但是还是看的迷迷糊糊的,干脆就单步执行一遍看看是怎么实现的,然后就重新写了个简易的授权 ...
- 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
概述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共 ...
- 如何使用Senparc.Weixin SDK 底层的Redis缓存并设置过期时间
最近在微信第三方平台项目开发中,有一个需求,所有绑定的公众号的回复规则按照主公众号的关键词配置来处理,我的处理思路是获取主公众号配置的关键词回复规则,缓存10分钟,由于需要使用Redis缓存来存储一些 ...
- 微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引
Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享. ...
随机推荐
- python_网络编程
网络ISO(国际标准化组织)--->网络体系结构标准(OSI模型)OSI: 网络信息传输比较复杂需要很多功能协同-->将功能分开,降低耦合度,让每个模块完成一定的功能-->将这些模块 ...
- 谷歌地图 API 开发之获取坐标以及街道详情
自己的项目中有获取当前点击的坐标经纬度或者获取当前街道的信息的需求.估计这个对于新手来说,还是比较麻烦的,因为从官网上找这个也并不是很好找,要找好久的,运气好的可能会一下子找到. 献上自己写的测试案例 ...
- 大型情感剧集Selenium:1_介绍 #华为云·寻找黑马程序员#
学习selenium能做什么? 很多书籍.文章中是这么定义selenium的: Selenium 是开源的自动化测试工具,它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web ...
- Android 中的Activity、Window、View之间的关系
一.概述 Activity 可以说是应用程序的载体(也可以理解为界面的载体,但是不界面),用户能够在上面绘制界面(Activity本身不绘制界面),并提供用户处理事件的API,维护应用程序的生命周 ...
- 声明式服务调用Feign
什么是 Feign Feign 是种声明式.模板化的 HTTP 客户端(仅在 consumer 中使用). 什么是声明式,有什么作用,解决什么问题? 声明式调用就像调用本地方法一样调用远程方法;无 ...
- 3- 设置断点修改Response
以下是借鉴别人的知识分享.我在这里转载,如有冒犯,还请告知. 只要你会设置断点修改请求内容的话,这个设置断点修改响应内容的方法也是一样的,只需要修改一下命令即可. 修改响应内容也有两种方法: 第一种: ...
- ACL(访问控制列表)
第六部分,访问控制列表.访问控制列表(Access Control List,ACL) 是路由器和交换机接口的指令列表,用来控制端口进出的数据包.应用场景有校园网中教师网和学生网分别管理,通过acl控 ...
- 常见的RuntimeException报错原因
对于RuntimeException 做java开发的朋友想必不会陌生,可以用于事物的回滚操作.异常类型也有很多种,写这篇文章主要是为了总结自己开发中遇到的一些异常类型 以便帮助大家遇到相应的报错找不 ...
- 【Web技术】399- 浅谈前端代码加密
作者简介:于航,PayPal Senior Software Engineer,在 PayPal 上海负责 Global GRT 平台相关的技术研发工作.曾任职于阿里巴巴.Tapatalk 等企业.f ...
- 【Vuejs】351- 带你解析vue2.0的diff算法
前言 vue2.0加入了virtual dom,有向react靠拢的意思.vue的diff位于patch.js文件中,该算法来源于snabbdom,复杂度为O(n).了解diff过程可以让我们更高效的 ...