MVC5 控制器 (POST) 被调用两次(每周一次)
Posted
技术标签:
【中文标题】MVC5 控制器 (POST) 被调用两次(每周一次)【英文标题】:MVC5 controller (POST) being called twice (once a week) 【发布时间】:2021-11-24 20:50:49 【问题描述】:我有一个 C# WebApp MVC5。一切通常都很完美,用户每分钟创建发票,有 10 个用户同时在不同的位置和不同的机器上创建发票。 该问题每周发生一次。
在日志中,我可以看到帖子被同一个用户同时调用了两次,当发生这种情况时,我看到客户端出现了一些网络延迟,但我无法重现它,即使使用chrome DevTools 的网络工具,用于模拟网络延迟。
当然,我可以在将数据持久化到数据库之前添加一些业务验证以避免重复数据,但这不是真正的问题。
我在互联网上读到这将是因为 IIS Http2 已启用并且应该被禁用,所以几周前我已经这样做了,但错误仍然存在。
这不是“无意中双击按钮”的问题,我很确定不是因为我确保在单击按钮后禁用该按钮,并在服务器返回响应后重新启用。
查看日志:第一个需要 9002 毫秒才能完成,而第二个需要 444 毫秒。这是我目前发现的网络延迟,因为这篇文章通常需要不到一秒的时间才能完成。
2021-09-22 16:21:41 167.86.95.177 POST /Sales/Invoices/Save - 443 jnamicela 45.225.105.89 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(Khtml,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 https://xpertdynamics.com/Home/Index 200 0 1236 9002
2021-09-22 16:21:41 167.86.95.177 POST /Sales/Invoices/Save - 443 jnamicela 45.225.105.89 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 https://xpertdynamics.com/Home/Index 200 0 0 444
【问题讨论】:
即使使用chrome devtools模拟网络卡顿,也无法重现。所以这是一个随机问题。幸运的是,这个问题并没有引起任何异常。即使重复调用,日志中请求的状态码也是200。如果能缩小问题的时间范围,或许可以在这段时间内监控应用程序和IIS。 【参考方案1】:解决了。这是客户端的问题。基本上他们的互联网连接不稳定。当他们点击“保存”按钮并且在过程中他们不知不觉地失去了互联网连接时,jquery.post 将直接转到 post.fail,但请求已成功发送到服务器,它只是浏览器那不知道,因为互联网连接丢失了。所以用户再次点击“保存”按钮。
我只是在调用 jquery.post 之前包含了一个验证步骤。它是:使用navigator.onLine
检查互联网连接,如果是,则检查用户会话是否仍然存在。 if(true && true) 然后调用 jquery.post。
我从 3 周前就开始监控了,并且该错误再也没有发生过。
【讨论】:
以上是关于MVC5 控制器 (POST) 被调用两次(每周一次)的主要内容,如果未能解决你的问题,请参考以下文章