微信公众平台开发:请求消息去重

互联网 17-2-27
  为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(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;//重复消息,取消执行          }      }  }

更多微信公众平台开发:请求消息去重相关文章请关注PHP中文网!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信公众平台开发:地图相关接口说明

相关资讯