2011-10-05 68 views
0

我正在使用C#處理兩種類型的應用程序。一個是Web服務,一個是MVC3應用程序。請求互斥記錄

我對兩者都有同樣的問題。我正在嘗試創建一個方法,在請求時返回分佈式節點的記錄。

併發問題導致這種情況是危險的。一旦進程「A」請求記錄工作。如果進程「B」在數據庫檢查記錄「A」之前請求一個,它們可能會得到相同的記錄,這對該系統不利。

在web服務我有一個被稱爲「GetRecordToProcess」一個Web方法。在控制器中也有相應的MVC3 ActionResult,它可以完成同樣的任務。

注意Web服務和MVC行動不需要是相互排斥的海誓山盟。他們實際上在兩張不同的表格上工作,但我碰巧在兩個單獨的項目中遇到了同樣的問題。

我有這樣一個工作版本與互斥,但進程正在運行我的CPU達到近60%,當我打電話Mutex.WaitOne這是baaaad。任何建議輕鬆的方式來做到這一點?這似乎很明顯,這將是一個普通的分佈式計算要求,我只是不知道通用的解決方案。

回答

0

後端需要負責解決併發問題。例如,您可以創建一個CheckOut表,用於跟蹤哪些人有當前簽出的記錄。

增強您的Web服務以使其GetRecordToRead()返回記錄的只讀版本,TryGetRecordToWrite()會嘗試檢出記錄(通過向CheckOut表中添加新的結帳記錄),並且它成功返回可記錄版本的記錄

+0

問題是,如果它不成功。這些是同步調用。我可以告訴客戶端重試,但似乎可能有更優雅的方式,我可以說GetRecordToWrite並總是期望記錄 – brandon

+0

如果您第一次調用像TryCheckoutRecord()方法,這是可能的。如果該調用成功,您可以隨意調用GetRecordToWrite(),並始終期待結果 – cordialgerm