Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重

简介: 原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重  为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都是一致的。
原文: Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重

  为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都是一致的。

  这种机制确保了在诸如网络状况不佳的情况下消息的回复成功率,但是有时候由于服务器负荷、本身请求过程就需要好几秒才能完成等情况,多次重复的消息反而成了服务器的负担,甚至对业务和数据也可能造成影响。

  针对这种情况,SDK增加了去重的设置,只需要在使用MessageHandler的时候加一句话即可:

 

messageHandler.OmitRepeatedMessage = true;//启用消息去重功能

 

       /// <summary>
        /// 最简化的处理流程(不加密)
        /// </summary>
        [HttpPost]
        [ActionName("MiniPost")]
        public ActionResult MiniPost(string signature, string timestamp, string nonce, string echostr)
        {
            if (!CheckSignature.Check(signature, timestamp, nonce, Token))
            {
                return new WeixinResult("参数错误!");//v0.8+
            }

            var messageHandler = new CustomMessageHandler(Request.InputStream, null, 10);

            messageHandler.OmitRepeatedMessage = true;//启用消息去重功能

            messageHandler.Execute();//执行微信处理过程

            return new FixWeixinBugWeixinResult(messageHandler);
        }

  去重的原理是通过当前用户的上下文,判断当前请求消息和上一条请求消息的MsgId是否一致,如果一直的话则终止向下执行。

文件:Senparc.Weixin.MessageHandlers.MessageHandler.cs

        public virtual void OnExecuting()
        {
            if (OmitRepeatedMessage && CurrentMessageContext.RequestMessages.Count > 1)
            {
                var lastMessage = CurrentMessageContext.RequestMessages[CurrentMessageContext.RequestMessages.Count - 2];
                if (lastMessage.MsgId != 0 && lastMessage.MsgId == RequestMessage.MsgId)
                {
                    CancelExcute = true;//重复消息,取消执行
                }
            }
        }

  去重的效果可以在模拟工具中体验:http://weixin.senparc.com/SimulateTool

 

  系列教程索引:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

 

目录
相关文章
|
移动开发 安全 API
微信H5支付--微信JS-SDK支付--点金计划
本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
1572 0
微信H5支付--微信JS-SDK支付--点金计划
|
开发工具
微信客服系统开发SDK使用教程- 拉取当前微信个人号列表请求(立即)
微信客服系统开发SDK使用教程- 拉取当前微信个人号列表请求(立即)
|
API 开发工具
企业微信SDK接口API调用-触发推送企业微信微信好友
企业微信SDK接口API调用-触发推送企业微信微信好友
|
开发工具
云控微信开发SDK使用教程--手机微信朋友圈图片上传服务端
云控微信开发SDK使用教程--手机微信朋友圈图片上传服务端
|
运维 Serverless API
Serverless 应用引擎产品使用合集之如何使用PHP SDK调用函数并在请求体(body)中传递字符串
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
前端开发
命令行创建React项目
命令行创建React项目
命令行创建React项目
|
JSON JavaScript 前端开发
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名生成详解
622 0
|
小程序 PHP
微信公众号开发(六)微信支付(发红包、企业支付到零钱)需要证书请求示例
这里最主要的就是curlpost请求的时候需要带上证书。否则请求会失败。
314 0
|
小程序 算法 API
可能是全网最完整的 C# 版微信 SDK
可能是全网最完整的 C# 版微信 SDK
1204 0
|
网络协议 开发工具 数据安全/隐私保护
ESP8266固件SDK开发之微信配网(AIRKISS)原理(一)
ESP8266固件SDK开发之微信配网(AIRKISS)原理(一)
1003 0

热门文章

最新文章