Maison > Applet WeChat > Développement WeChat > le corps du texte

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

高洛峰
Libérer: 2017-02-27 13:34:09
original
2574 Les gens l'ont consulté

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;//启用消息去重功能
Copier après la connexion
/// <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);
 }
Copier après la connexion

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;//重复消息,取消执行
        }
    }
}
Copier après la connexion


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 !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal