Giả sử rằng tôi có một bộ điều khiển với phương thức "UpdateRecord (int recordID)". Phương thức này được cho là cập nhật bản ghi đã cho chỉ một lần (bằng cách thiết lập giá trị appropiate để ghi trong cơ sở dữ liệu, giả sử nó là cột "IsLock"). Để kiểm tra xem tôi có:ASP.NET MVC có thực hiện các yêu cầu trong hàng đợi hay đồng thời
- Tải xuống bản ghi với bản ghi đã choID từ cơ sở dữ liệu.
- Kiểm tra xem bản ghi có giá trị "IsLock" được đặt thành FALSE hay không.
- Nếu IsLock == FALSE - cập nhật bản ghi trong cơ sở dữ liệu và đặt IsLock thành TRUE, nếu không - không cập nhật và trả về lỗi.
Vì vậy, bây giờ tôi tự hỏi điều gì sẽ xảy ra nếu tôi thực hiện hai yêu cầu AJAX cho phương thức này (với cùng một bản ghiID) một ofter khác. ASP.NET sẽ thực hiện yêu cầu thứ hai chỉ sau khi yêu cầu đầu tiên được thực hiện? Hoặc nó sẽ thực hiện đồng thời cả hai?
Để làm rõ hơn xin vui lòng cho tôi biết liệu tình huống này có thể:
- tôi làm yêu cầu đầu tiên (recordID = 555).
- Một phần nghìn giây sau, tôi thực hiện yêu cầu thứ hai (recordID = 555).
- Yêu cầu bản ghi được tải xuống lần đầu tiên với bản ghiID đã cho = 555, đã kiểm tra IsLock = FALSE, vì vậy, nó bắt đầu chuẩn bị truy vấn để cập nhật bản ghi.
- Yêu cầu thứ hai được tải xuống hồ sơ với recordID = 555, kiểm tra IsLock = FALSE, vì vậy nó bắt đầu chuẩn bị truy vấn để cập nhật bản ghi (IsLock là stilL FALSE, vì yêu cầu đầu tiên không có đủ thời gian để cập nhật cơ sở dữ liệu).
- Yêu cầu đầu tiên được cập nhật thành công.
- Yêu cầu thứ hai được cập nhật thành công (nhưng nó sẽ trả về lỗi vì một bản ghi chỉ có thể được cập nhật một lần).
Nếu có thể, vui lòng cho mi biết cách tôi có thể đảm bảo phương pháp ngăn chặn tình huống này xảy ra?
Tôi không muốn thay đổi ảnh hưởng đến toàn bộ ứng dụng của tôi. Tôi không có quyền truy cập vào cài đặt IIS. Tôi có thể làm gì? – Andrzej
Đọc về http://msdn.microsoft.com/en-us/library/cs6hb8k4(v=vs.71).aspx – vittore
Bạn đề xuất giải pháp thực sự nic, nhưng tôi lo lắng rằng việc thực hiện sẽ mất quá nhiều thời gian (Trong câu hỏi của tôi, tôi đã cung cấp ví dụ rất đơn giản). Có cách nào để buộc thực hiện các yêu cầu đối với phương thức cụ thể này trong hàng đợi không? – Andrzej