我在asp.net MVC2中遇到了一些奇怪的行为(至少这不是我所期望的)。我有一个处理信用卡的控制器httppost操作。我在服务器上设置了一个会话变量,让我知道用户是否试图处理卡。完成后,我会清除该会话变量。我正在做一些非常快速的posts来测试这个过程,会话变量每次都返回null,因为我在过程结束时清除了会话变量。我有一些调试打印,它们告诉我所有请求都是同步处理的。is...the第一次尝试发生,它失败,会话变量被清除,第二次尝试失败,变量被清除,等等。我的第一个想法是,这是调试的一个副作用,它只是为了调试目的而使用本地was服务器排列请求。所以我把它放在一个开发服务器上,同样的事情也在发生。同步处理多个提交/发布。我甚至在其中放了一个System.Threading.Sleep,以确保它会在我设置会话变量后立即停止,并且在第一个请求完成之前,它甚至不会启动第二个请求。
还有没有人见过这种行为?我的理解是,每个请求都会产生一个工作进程,并且这些操作可以同步发生。
下面是一些psuedo代码
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是相同的。
谢谢
发布于 2010-05-20 11:33:24
这是浏览器一次只发送一个POST请求并将其他请求排入队列的限制。这不是web服务器的限制。
模拟多个请求的一种方法是使用tinyget之类的工具,该工具是IIS6.0工具包的一部分。对于您的测试,您将需要使用多线程选项。
希望这能有所帮助。
https://stackoverflow.com/questions/2868508
复制相似问题