>위챗 애플릿 >위챗 개발 >WeChat 공개 플랫폼 개발: 메시지 중복 제거 요청

WeChat 공개 플랫폼 개발: 메시지 중복 제거 요청

高洛峰
高洛峰원래의
2017-02-27 13:34:092606검색

정보 요청 메시지의 도착률을 보장하기 위해 WeChat 서버는 MsgId 등을 포함한 모든 텍스트 콘텐츠가 응답 메시지(ResponseMessage)를 제때 받지 못한 경우 동일한 요청 메시지(RequestMessage)를 여러 번 보냅니다. .

이 메커니즘은 네트워크 상태가 좋지 않은 상황에서 메시지 응답 성공률을 보장하지만 때로는 서버 부하 및 요청 프로세스 자체로 인해 완료하는 데 몇 초가 걸리며 대신 여러 개의 메시지가 반복되어 부담이 됩니다. 서버에 있으며 비즈니스와 데이터에도 영향을 미칠 수 있습니다.

이러한 상황에 대응하여 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;//重复消息,取消执行
        }
    }
}


추가 WeChat 공개 플랫폼 개발: 메시지 중복 제거 관련 기사 요청, 다음 사항에 주의하세요. PHP 중국어 넷!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.