ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 在服务器场上锁定(asp.net)

2019-05-30 17:52:22  阅读:196  来源: 互联网

标签:c asp-net locking distributed-computing distributed-system


我想知道是否有任何方法可以使用像MySQL Cluster这样的分布式服务器在部署在多个服务器上的asp.net Web应用程序上执行“锁定”.

例如,采用更新帐户余额的经典示例.没有两个请求应该同时更新相同的帐户余额.例如:

会员1帐户余额为100.

>请求A访问服务器1以向成员1的余额添加100
>请求B访问服务器2以将50添加到成员1的余额

因此,请求A将余额从100更新为200并保存.
请求B将余额更新为150,并保存.

这些都恰好同时发生,因此丢失信息,因为最终结果应该是250.

如何锁定,使得请求B必须等到请求A完成,直到它检索到余额.如果是单个进程,则可以通过应用程序范围的锁实现.但是,由于存在多个独立进程,因此不会像服务器1那样工作,因为它没有被锁定,也没有服务器2

任何想法或最佳实践如何做到这一点?

解决方法:

这就是交易的目的.

TransactionScope中包含需要为atomic的操作,以将它们注册到显式事务中.

这并不能完全解决陈旧数据的问题,因为一旦事务完成,如果另一个并发用户使用旧值进行更新,您仍然会遇到问题.

解决方案是在表上使用一个字段,该字段在行更改时会发生更改 – 在SQL Server 2008中,这是rowversion类型.

如果rowversion未更改,则只更新行 – 如果有,则通知用户并在不进行更新的情况下恢复当前值.

标签:c,asp-net,locking,distributed-computing,distributed-system
来源: https://codeday.me/bug/20190530/1185101.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有