0

关注时会回复消息异常

微信开发 · h857190695 · 查看 58 次 · 于 27天前

关注回复消息 并保存用户信息

下面实现的是第一次关注是获取用户信息自动保存到数据库
若用户取关后 再次关注 就修改用户的关注状态 或其他信息  
一开始 这里不用异步的 添加 修改 报异常

错误提示:One or more errors occurred. (A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.)
内部异常信息:A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe.
堆栈跟踪:   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
  at HFCore.WebSite.MessageHandlers.CustomMessageHandler.CustomMessageHandler.OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage) in D:\Project\WeiXin\HFCore.WebSite\MessageHandlers\CustomMessageHandler\CustomMessageHandler_Events.cs:line 105

查找问题后可能是没用异步的问题:
https://stackoverflow.com/questions/20628792/multi-async-in-entity-framework-6

然后现在用异步出现的情况:
将OnEvent_SubscribeRequest关注事件改为异步OnEvent_SubscribeRequestAsync后 直接进DefaultResponseMessage 里面的try{}catch{}都没报异常

/// <summary>
       /// 订阅(关注)事件
       /// </summary>
       /// <returns></returns>
       public override async Task<IResponseMessageBase> OnEvent_SubscribeRequestAsync(RequestMessageEvent_Subscribe requestMessage)
       {
           WeixinUserInfoResult userInfo = null;
           try
           {
               var wxAccountViewModel = _wxAccountService.GetPagedList(a => a.Deleted == false&&a.Id==_id, 1, 1000).Result;
               var accessToken = AccessTokenContainer.TryGetAccessToken(wxAccountViewModel[0].AppId, wxAccountViewModel[0].AppSecret);

               userInfo = CommonApi.GetUserInfo(accessToken, requestMessage.FromUserName);
               _logger.LogInformation(string.Format("{0}关注当前公众帐号,发送人:{1} ", userInfo.nickname, requestMessage.FromUserName.Trim()));
               WxUserViewModel wxUserModel = _wxUserService.GetViewModel(a => a.OpenId == requestMessage.FromUserName.Trim()).Result;
               
               if (wxUserModel == null)
               {
                   wxUserModel = new WxUserViewModel();
                   wxUserModel.OpenId = requestMessage.FromUserName;
               }
               wxUserModel.Subscribe = true;
               if (userInfo != null)
               {
                   wxUserModel.HeadimgUrl = userInfo.headimgurl;
                   wxUserModel.Language = userInfo.language;
                   wxUserModel.NickName = userInfo.nickname;
                   wxUserModel.AccountId = wxAccountViewModel[0].Id;
               }
               else
               {
                   wxUserModel.AccountId = wxAccountViewModel[0].Id;
                   wxUserModel.NickName = "";
                   wxUserModel.HeadimgUrl = "";
                   wxUserModel.Language = "";
               }

               wxUserModel.Subscribe = true;
               wxUserModel.Province = userInfo.province;
               wxUserModel.City = userInfo.city;
               wxUserModel.Country = userInfo.country;
               wxUserModel.Sex = userInfo.sex == 1 ? "男" : "女";
               wxUserModel.Subscribe_Time = DateTime.Now;
               wxUserModel.CreatedOn = DateTime.Now;
               wxUserModel.UpdatedOn = DateTime.Now;
               _logger.LogInformation("OpenId:" + wxUserModel.OpenId);
               _logger.LogInformation("wxUserModel.Id:" + wxUserModel.Id);

               if (string.IsNullOrEmpty(wxUserModel.Id))
               {
                   await _wxUserService.AddViewModel(wxUserModel);
               }
               else
               {
                   //_wxUserService.UpdateViewModel(wxUserModel);
               }

               var page = _wxSubscribeReplyService.GetPagedList(a=>a.Deleted==false && a.AccountId==_id,1, 100000).Result;
               
               if (string.IsNullOrEmpty(page[0].ContentId.Trim()))
               {
                   var responseMessage = CreateResponseMessage<ResponseMessageText>();
                   responseMessage.Content = string.Format("{0},欢迎您,谢谢关注!", wxUserModel.NickName).Trim(',');

                   return responseMessage;
               }
               else
               {

                   if (page[0].KeyWordContentType == KeyWordContentType.文本.ToString())      //文本
                   {
                       var responseMessage = CreateResponseMessage<ResponseMessageText>();
                       var model = _wxKeyWordTextContentService.GetViewModel(page[0].ContentId).Result;
                       responseMessage.Content = string.Format("{0},{1}", wxUserModel.NickName, model.Text).Trim(',');
                       return responseMessage;
                   }
                   else if (page[0].KeyWordContentType == KeyWordContentType.图片.ToString())  //图片
                   {
                       var model = _wxPictureMaterialService.GetViewModel(page[0].ContentId).Result;

                       var responseMessage = CreateResponseMessage<ResponseMessageImage>();
                       responseMessage.Image.MediaId = model.Media_Id;
                       return responseMessage;
                   }
                   else                                                                        //图文
                   {
                       var model = _wxGraphicMaterialService.GetViewModel(page[0].ContentId).Result;
                       var responseMessage = CreateResponseMessage<ResponseMessageNews>();
                       responseMessage.Articles.Add(
                           new Article()
                           {
                               Title = string.Format("{0},{1}", wxUserModel.NickName, model.Title).Trim(','),
                               Description = model.Digest,
                               PicUrl = string.Format("http://{0}{1}", "C:/WebSitesTest/WeiXin/wwwroot", model.CoverImage),
                               Url = model.Url
                           });
                       return responseMessage;
                   }
               }
           }
           catch (Exception ex)
           {
               
               if (ex.InnerException != null)
               {
                   _logger.LogInformation("错误提示ex.InnerException" + ex.InnerException);
                   if (!string.IsNullOrEmpty(ex.InnerException.Message))
                   {  
                       _logger.LogInformation("错误提示ex.InnerException.Message !=null"+"---错误信息:"+ex.Message + "\r\n" + "内部异常信息:" + ex.InnerException.Message + "\r\n" + "堆栈跟踪:" + ex.StackTrace + "\r\n" + "错误的应用程序或对象的名称:" + ex.Source);
                   }
                   else
                   {
                       _logger.LogInformation("错误提示ex.InnerException.Message =null"+"---错误信息:" + ex.Message + "\r\n" + "堆栈跟踪:"+ex.StackTrace + "\r\n" + "错误的应用程序或对象的名称:"+ ex.Source);
                   }
               }
               else
               {
                   _logger.LogInformation("错误提示ex.InnerException=null"+ "---错误信息:"+ex.Message + "\r\n" + "堆栈跟踪:"+ ex.StackTrace + "\r\n" + "错误的应用程序或对象的名称:"+ex.Source);
               }

               _logger.LogInformation(string.Format("错误信息:{0},抛出当前异常:{1}", ex.Message, ex.StackTrace));

               var responseMessage = CreateResponseMessage<ResponseMessageText>();
               responseMessage.Content = "欢迎您,谢谢关注!";
               return responseMessage;
           }

       }

请官方帮忙看下有什么方法 解决此问题。 谢谢!!!
       
您尚未登陆,请:网站登录 or 微信登陆
共收到 2 条回复
0

Senparc 26天前

已经发布新版本,请试一下新版本。

0

h857190695 27天前

问题可能就出现在这个里:
if (string.IsNullOrEmpty(wxUserModel.Id))
              {
                  _wxUserService.AddViewModel(wxUserModel);
              }
              else
              {
                  wxUserService.UpdateViewModel(wxUserModel);
              }


热门话题 更多 >>

当前扩展缓存策略没有进行注册

gis008 29 个回复 • 查看 458 次 • 108天前

GetWxaCodeUnlimit 生成1KB文件

a124754649 22 个回复 • 查看 1133 次 • 14天前

cpu满载

blezt 21 个回复 • 查看 545 次 • 99天前

SessionId无效

gdlcf88 11 个回复 • 查看 434 次 • 47天前

“Nested”的类型初始值设定项引发异常

dream0013 9 个回复 • 查看 313 次 • 151天前

关注和取消关注报错的

blqw 9 个回复 • 查看 156 次 • 26天前

Messagehandler问题

Jenny_Wu 7 个回复 • 查看 268 次 • 111天前

通过扫描临时二维码关注公众号

诀别十年 7 个回复 • 查看 161 次 • 96天前

core 3.0对接微信公众号后消息响应报错。

jianweie 7 个回复 • 查看 119 次 • 12天前

是否有拦截器

qq1170971516 6 个回复 • 查看 180 次 • 24天前

素材管理-推送失败

cristi 6 个回复 • 查看 226 次 • 140天前

core环境下退款方法tenpayv3.refund方法失败

ericsy 6 个回复 • 查看 325 次 • 93天前

微信公众号不显示关注事件的content

jiangchen 4 个回复 • 查看 294 次 • 72天前

QQ群
  • 1群:300313885 (2000人群 已满)
  • 2群:293958349 (1000人群 已满)
  • 3群:342319110 (2000人群 已满)
  • 4群:372212092 (500人群 已满)
  • 5群:377815480 (1000人群 已满)
  • 6群:425898825 (1000人群 已满)
  • 7群:482942254 (500人群 已满)
  • 8群:106230270 (500人群 已满)
  • 9群:539061281 (500人群 已满)
  • 10群(分布式缓存):246860933 Senparc.Weixin.Cache SDK 10群
  • 11群:553198593 (500人群 已满)
  • 12群(微信小程序):108830388 Senparc微信小程序 12群
  • 13群(开放平台):183424136 (500人群 已满)
  • 14群(视频学员):588231256 Senparc.Weixin SDK 14群
  • 15群(公众号/综合):289181996 Senparc.Weixin SDK 15群
  • 16群(开放平台):860626938 (500人群 已满)
  • 17群(开放平台):770615466 [17群 开放平台]SenparcSDK
  • NeuChar 技术交流群:618605800 NeuChar 开发交流群
  • SCF 技术交流群:147054579 SCF 开发交流群
微信开发宝典:《微信开发深度解析》

由 Senparc.Weixin SDK 作者耗时两年完成的微信开发图书《微信开发深度解析:公众号、小程序高效开发秘籍》已经出版!

历经2年精心雕琢,难得的“理论 + 实战案例 + 趟坑经验”总结,
从需求分析、策划,到账号申请、验证,再到全面的 API 及开发工具,
覆盖所有开发微信公众号(含订阅号、服务号和小程序)所需关键技能!

视频教程:《微信公众号+小程序快速开发》

由盛派课堂(盛派旗下独立教育品牌)制作,《微信开发深度解析》作者苏震巍先生主讲的《微信公众号+小程序快速开发》视频课程开课啦!

课程采用“理论+实战”的教学形式,结合部分《微信开发深度解析》内容,独立于书本,包含了更多的操作演示和案例展示,帮助大家从多个维度学习微信开发以及.NET开发过程中的诸多技巧。
课程包含两大部分:
1. 微信开发基础技能
2. 公众号及小程序案例实战
共计60课时,配有番外篇,目前视频已在网易云课堂上线。