2010-07-14 36 views
0

我目前正在编写一个WCF Web服务,它使用LINQ to SQL来获取SQL数据库的工作。处理LINQ的并发

我有一个用户表有一个整数,存储多少请求到用户已完成的服务。在测试过程中,我得到一些并发probs更新整数,如果它在同一时间完成。

什么是最好的处理方法?如果LINQ检测到冲突,重新获取使用计数器并重试直到它改变了?

任何想法都会有帮助。

回答

0

不更新客户端上的计数器(在WCF过程),而是更新服务器上:

UPDATE Users 
SET Counter = Counter + 1 
WHERE UserId = @userID; 

这样,你不关心其他concurent电话,因为每次调用正确用1递增计数器。问题是LINQ无法做到这一点,但最终你必须使用正确的工具来完成正确的工作(在这种情况下,它是一个直接的SqlCommand)。

1

请求数如何实时?

如果它不一定是实时的,也许你可以将你的提取与你的更新分开。检索用户信息并将消息放入MSMQ队列或服务代理中,并让其他进程将消息从队列中拉出并以此方式更新请求计数。

希望这会有所帮助。

+0

感谢您的答复 - 我从来没有想过非实时解决方案。编号喜欢实时,但你的想法是一个很好的选择。 – Bram 2010-07-14 02:35:46

+0

很高兴我能帮到你。 – 2010-07-14 02:40:42