【重要更新】Senparc.Weixin SDK v6.5 升级说明(支持 .NET Core 3.0 及分布式消息上下文)

【重要更新】Senparc.Weixin SDK v6.5 升级说明(支持 .NET Core 3.0 及分布式消息上下文),第1张

概述Senparc.Weixin SDK v6.5 开始支持 .NET Core 3.0,并将微信消息上下文进行了大幅度的重构,支持了使用分布式缓存存储上下文信息,这意味着在分布式系统中,现在 Senpa

  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,并希望继续使用它们,请将基类从原先的:

 

    class CustomMessageContext : MessageContext<IRequestMessageBase,IResponseMessageBase>    {        ...    }

    变更为:

    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 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 > 1)                    {                        result.AppendFormat("您刚才还发送了如下消息({0}/{1}):\r\n",currentMessageContext.RequestMessages.Count,currentMessageContext.StorageData);                        for (int i = currentMessageContext.RequestMessages.Count - 2; i >= 0; i--)                        {                            var historyMessage = currentMessageContext.RequestMessages[i];                            result.AppendFormat({0} 【{1}】{2}\r\nHH: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 v6.5 升级说明(支持 .NET Core 3.0 及分布式消息上下文)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1209935.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存