我目前正在編寫一個WCF Web服務,它使用LINQ to SQL來獲取SQL數據庫的工作。處理LINQ的併發
我有一個用戶表有一個整數,存儲多少請求到用戶已完成的服務。在測試過程中,我得到一些併發probs更新整數,如果它在同一時間完成。
什麼是最好的處理方法?如果LINQ檢測到衝突,重新獲取使用計數器並重試直到它改變了?
任何想法都會有幫助。
我目前正在編寫一個WCF Web服務,它使用LINQ to SQL來獲取SQL數據庫的工作。處理LINQ的併發
我有一個用戶表有一個整數,存儲多少請求到用戶已完成的服務。在測試過程中,我得到一些併發probs更新整數,如果它在同一時間完成。
什麼是最好的處理方法?如果LINQ檢測到衝突,重新獲取使用計數器並重試直到它改變了?
任何想法都會有幫助。
不更新客戶端上的計數器(在WCF過程),而是更新服務器上:
UPDATE Users
SET Counter = Counter + 1
WHERE UserId = @userID;
這樣,你不關心其他concurent電話,因爲每次調用正確用1遞增計數器。問題是LINQ無法做到這一點,但最終你必須使用正確的工具來完成正確的工作(在這種情況下,它是一個直接的SqlCommand)。
請求數如何實時?
如果它不一定是實時的,也許你可以將你的提取與你的更新分開。檢索用戶信息並將消息放入MSMQ隊列或服務代理中,並讓其他進程將消息從隊列中拉出並以此方式更新請求計數。
希望這會有所幫助。
感謝您的答覆 - 我從來沒有想過非實時解決方案。編號喜歡實時,但你的想法是一個很好的選擇。 – Bram 2010-07-14 02:35:46
很高興我能幫到你。 – 2010-07-14 02:40:42