Maison  >  Article  >  Applet WeChat  >  Développement de la plateforme publique WeChat : demander la déduplication des messages

Développement de la plateforme publique WeChat : demander la déduplication des messages

高洛峰
高洛峰original
2017-02-27 13:34:092569parcourir

Afin de garantir le taux d'arrivée des messages de demande d'informations, le serveur WeChat enverra le même message de demande (RequestMessage) plusieurs fois s'il ne reçoit pas le message de réponse (ResponseMessage) à temps. Tout le contenu texte, y compris MsgId, etc. . sont cohérents.

Ce mécanisme garantit le taux de réussite de la réponse aux messages dans des situations telles que de mauvaises conditions de réseau. Cependant, parfois en raison de la charge du serveur et du processus de demande lui-même prenant plusieurs secondes, plusieurs messages répétés deviennent plutôt un fardeau. sur le serveur et peuvent même affecter les activités et les données.

En réponse à cette situation, le SDK a ajouté un paramètre de déduplication. Il vous suffit d'ajouter une phrase lors de l'utilisation de 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);
 }

Le principe de la déduplication se fait via In. le contexte de l'utilisateur actuel, détermine si le MsgId du message de requête actuel et le message de requête précédent sont cohérents. S'ils sont cohérents, l'exécution vers le bas sera terminée.

Fichier : 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;//重复消息,取消执行
        }
    }
}


Pour plus de développement de la plateforme publique WeChat : demandez des articles sur la déduplication des messages, veuillez suivre Site Web chinois PHP !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn