社区
C#
帖子详情
WPF应用程序如何杜绝骚操作
货郎大叔
2020-08-24 08:15:50
一个WPF应用程序,一个TabControl,有几个TabItem,切换TabItem的时候,都会访问云数据库,以显示数据。为了防止用户恶意点击,给服务器造成压力,一般采取什么方式来杜绝?
...全文
406
10
打赏
收藏
WPF应用程序如何杜绝骚操作
一个WPF应用程序,一个TabControl,有几个TabItem,切换TabItem的时候,都会访问云数据库,以显示数据。为了防止用户恶意点击,给服务器造成压力,一般采取什么方式来杜绝?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wanghui0380
2020-08-24
打赏
举报
回复
同样的道理,逻辑弄清楚了 技术上使用限流,连续操作不理,只把动作存着。你稳定不动了,在拿最后一个。(比如我可以用rx.timeout 和last做)
lich2005
2020-08-24
打赏
举报
回复
尽量利用缓存设计来应对这种密集操作,也就是一些数据可以先下到客户端,客户端本地去读取。有需要点一下刷新之类的按钮再去服务器上读取。实际上数据库查询的时候也会有缓存查询,如果数据库性能不差的话,应该能应付这种情况的。
wanghui0380
2020-08-24
打赏
举报
回复
so,逻辑弄清楚了,技巧上其实无所谓。 这里你用mutex互斥也一的效果
晨易夕
2020-08-24
打赏
举报
回复
是的,这种需求与WPF没有技术上的联系。 就比如拿前端的防抖(debouncing)和节流(throttling)来说,优化的应用场景就十分广泛。 你这儿为了防止用户骚操作乱点增加服务器压力,可以使用防抖优化。即当用户点击切换之后,延迟一定时间后再调用后台接口,如果在这个延迟时间内用户又不断点击切换,就取消之前准备要调用接口的操作,换成调用新操作的任务。 建议先去了解下
防抖(debouncing)
和
节流(throttling)
的理念。
wanghui0380
2020-08-24
打赏
举报
回复
伪代码 tab1load锁 async task tab1load方法() { if(tab1load锁.钥匙==0) retrun; await tab1load锁.异步使用中 tab1.加载状态=加载中 await 加载远端数据 tab1.加载状态=加载完毕 tab1load锁.归换钥匙 } 这样无论他怎么切换,前一个没执行完毕,后一个直接return出去。so,我可以让你切换UI,但我不会重复执行动作
wanghui0380
2020-08-24
打赏
举报
回复
问题: 1.客户会来回操作,可以不让他来回操作,放入加载模态框,不加载完毕不准下次操作 2.如果1你觉着逻辑不合理,ok,我们还是允许他切换,只是加锁。你上次访问没完成,进不了下一次的 查询锁:没钥匙直接弹框告诉客户,正在等待上次请求,有钥匙拿到钥匙 await 一次访问 归换钥匙 3.后端幂等性操作,每个操作只要条件一样,他不会影响变化。那么缓存依赖,那么还是加锁直接返回正在操作请勿重复请求(语义上是“条件一样,我直接返回缓存的结果,如果语义不一样,我执行完了回告诉你结果,但我不会重复执行动作,因为已经有了一个一模一样的条件在运行”)
蜗牛慢慢趴
2020-08-24
打赏
举报
回复
界面已经这样设计了,就没啥大问题吧?用户骚操作一下服务器就受不了了,建议更换服务器
datafansbj
2020-08-24
打赏
举报
回复
这种需求与 WPF 没有半毛钱关系。
通常情况下,为防止恶意或机器人操作,服务端对一个会话里的请求会加上判断,如果请求过于密集(频繁),可加延迟处理,或直接返回错误提示。当然也可在客户端增加这些逻辑处理。不过这种处理是双刃剑,处理不好用户体验度变差。
本质:你根据什么判断是误操作还是正常操作?如果依据本身就不准确或不严谨,那么任何处理方法都不会带来完美的结果。
鸡窝里的毛
2020-08-24
打赏
举报
回复
不是实时数据的话,在程序运行时预加载。
threenewbee
2020-08-24
打赏
举报
回复
把调用的代码放在一个单独的类中。
每次访问,都判断下距上次访问的时间,如果<xxx 秒,不执行。
不要直接客户端连数据库,应该在服务器上部署web api,通过 web api由服务器载访问数据库
c#.net 实现课程管理系统功能 三层架构
系统包括SQL SERVER数据库和项目文件,用的三层架构实现,简单易学,适合初学者参考 .....
C#
WPF
源码控件库推荐
WPF
开发桌面软件具有天然优势,能快速漂亮的界面程序。 Newbe...
但光有原生控件还不行,总得搞点趁手的第三方库——今儿给大家安利个宝藏项目Newbeecoder.UI,这玩意儿我最近在重构项目时试了把,直接让开发效率原地起飞。最近项目用这玩意重构了权限管理模块,原本要写三天的CRUD页面,用他们的DataGrid模板+表单验证组合拳,愣是半天就怼出来了。不过源码结构清晰得像教科书,每个控件都带Demo,我这种懒得看文档的直接F12进源码抄作业。Newbeecoder.UI是一个轻量级和扩展性的开源项目,基于MVVM开发框架,可用来快速搭建
WPF
应用程序
。
WPF
MessageBox高级应用与实战技巧
本文深入探讨了
WPF
MessageBox的高级应用与实战技巧,帮助开发者超越基础弹框功能。文章详细解析了MessageBox的交互决策核心、自定义按钮与图标的进阶方法,并重点解决了模态阻塞、多线程安全及异步调用等复杂场景下的难题。同时,还涵盖了国际化、可访问性支持以及关键的实战避坑指南,旨在提升桌面应用的用户体验与代码健壮性。
WPF
Label控件进阶指南:从基础属性到动态数据绑定
本文深入探讨了
WPF
Label控件从基础属性到动态数据绑定的进阶应用。通过剖析Content、Target等核心属性,并结合样式模板与数据绑定技术,揭示了如何将Label从静态文本显示转变为支持复杂内容、键盘
操作
优化及数据驱动更新的强大界面元素,助力开发者构建高效、动态的
WPF
应用程序
。
WPF
命令传参的3种高阶玩法:从字符串到控件属性的完整指南
本文深入探讨了
WPF
在MVVM模式下命令参数传递的三种高阶技巧。通过解析命令参数传递的本质,详细介绍了直接传递控件实例、动态绑定控件属性值以及使用MultiBinding构建复合参数的方法。这些技巧能帮助开发者在保持ViewModel纯净的同时,灵活处理复杂UI交互,有效提升
WPF
应用程序
的开发效率与代码质量。
C#
111,131
社区成员
642,542
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章