我得到在asp.net MVC2一些怪異的行爲(至少這不是什麼我期待)。我有一個處理信用卡的控制器httppost操作。我正在服務器上設置一個會話變量,讓我知道用戶是否試圖處理一張卡片。我完成後清除會話變量。我做了一些非常快速的職位,以測試過程,因爲我在過程結束時清除會話變量會話變量回來空每次。我有一些調試打印,告訴我所有請求都是同步處理的。這是...第一次嘗試時,它失敗了,會話變量被清除,第二次嘗試和失敗,該變量被清除,等...我首先想到的是,這是調試的副作用,它只是內襯請求使用本地Web服務器進行調試。所以我把它放在開發服務器上,同樣的事情正在發生。多個提交/帖子是同步處理的。我甚至把System.Threading.Sleep在那裏,以確保它會停下來之後我設置會話變量,它仍然直到第一個做甚至不會開始第二次請求。asp.net mvc的多線程2
是否有其他人看到過這種行爲?我的理解是,每個請求都會產生一個工作進程,並且這些操作可能會異步發生。
下面是一些僞代碼
if (Session["CardCharged"] != null)
return RedirectToAction("Index", "Problem");
Session["CardCharged"] = false; //starting the process
System.Threading.Thread.Sleep(10000);
//charge card here
if (!providerResponse.IsApproved)
{
System.Diagnostics.Debug.WriteLine("failed");
Session["CardCharged"] = null; //have to allow them to charge again since this failed
return View(myModel);
}
Session["CardCharged"] = true;
return RedirectToAction("Index", "OrderComplete");
我要指出,我的代碼總是失敗,用於測試目的的信用卡檢查。我試圖測試處理仍在發生的情況,並將用戶重定向到其他地方。我在其他地方設置了虛擬會話變量,以確保會話ID「粘」。所以我知道每個請求的會話ID是相同的。
由於
你是如何生成測試要求?它們可能是同步製作的嗎? – joelt 2010-05-19 19:22:26
我正在迅速點擊提交或刷新頁面。由於在設置變量後有一個線程slero,它應該沒關係。下一個請求應該檢查並重定向。但是這個請求甚至在另一個做完之後纔開始。 – 2010-05-19 19:52:05
我認爲這可能是一個單一請求會話問題。至少在傳統的ASP中有這樣的限制。 – svinto 2010-05-22 08:58:32