阻止用户在同一行上工作

K R*_*ard 12 vb.net sql-server asp.net ajax concurrency

我的工作中的Web应用程序类似于票证工作系统.一些用户输入新问题.其他工人选择并解决问题.所有数据都在MS SQL Server 2005中维护.

致力于解决问题的用户转到他们可以查看未解决问题的页面.因为多达20个人可以同时查看此页面,我必须解决的一个潜在问题是,如果有人选择了其他人在页面加载后选择的问题,会发生什么.

为了解决这个问题,我做了两件事.首先,显示要选择的问题的gridview使用AJAX计时器每秒更新一次.一旦选择了一个问题,它最多会在一秒后消失.如果他们在这一秒内选择一个,他们会收到一条消息,要求他们选择另一个.

问题是AJAX的一部分是发送了太多的更新(这是我假设的),它正在影响页面和数据库的性能.此外,更新不会每秒执行一次.我发现计时器在工作时触发存储过程是不可靠的.

必须有一个更好的方法,但我似乎找不到一个.有没有人有这种情况的经验或有建议让多个用户选择相同的记录来维护?我真的不想完全禁用AJAX部分,因为我觉得单独的消息会使应用程序难以使用.

谢谢,

Jac*_*itt 3

有两件事可以帮助缓解您的问题。

首先,无论您的 ajax 更新时间范围如何,都需要在选择后通知案例已被处理。即使每秒检查一次并不意味着两个人不能在他们认为的同一时间点击同一个案例。在这种情况下,需要通知用户之一他们的选择无效,即使在选择时它看起来是有效的。这个通知不需要详细说明;即使在失望的情况下,保持轻松、有益的语气也可以改善用户的感知。如果您识别出已经选择该记录的用户,这不仅可以帮助您的用户将来进行协调,还可以将注意力从您的程序转移到蛇吞了这个有趣案例的用户身上。(事实上​​,管理层可能喜欢让您的用户偶尔发生冲突,因为这会激励他们更快地选择案例)

其次,对案例的显示方式进行一些小调整可以减少选择冲突。添加随机元素来显示顺序和/或过滤掉显示的所有其他案例将帮助您的用户自然地选择不同的案例。人类模式识别和任务选择并不是真正随机的,因此呈现的微小变化可能等于选择行为的巨大变化。碰撞机会的减少使您的碰撞通知很少出现(从而减少用户的挫败感)。如果您的用户可以分为有助于确定有用案例排序/过滤的分类,那就更好了。

好的,随着时间的推移,对您有所帮助的第三件事是,如果您记录冲突发生的时间(包含有关冲突的有用元数据,例如涉及的人员和选择时间)。有了可靠的碰撞数据,您就可以找到哪些有效,哪些无效。随着时间的推移,您可以根据实际用例完善您的应用程序,并尽早发现潜在问题。没有什么比在用户意识到问题存在之前就解决问题(并能够解释解决问题的计划)更能让他们放心的了。

通过这些缓解模式,您可能会发现可以安全地减少 ajax 查询时间,而不会影响用户体验。通过有用的日志记录,您将可以确保所做的任何调整实际上都有效(或无效——了解这一点可能更有用)。