asp.net MVC2에서 이상한 동작이 나타납니다. (적어도 기대하지는 않습니다). 나는 신용 카드를 처리하는 컨트롤러 httppost 액션을 가지고있다. 나는 사용자가 카드를 처리하려고 시도했는지 알려주는 서버에 세션 변수를 설정하고있다. 완료되면 세션 변수를 지 웁니다. 프로세스를 테스트하기 위해 몇 가지 매우 빠른 게시물을 작성 중이며 프로세스가 끝날 때 세션 변수를 지우므로 세션 변수가 매번 null로 돌아오고 있습니다. 모든 요청이 동 기적으로 처리된다는 것을 보여주는 일부 디버그 인쇄물이 있습니다. 즉 ... 첫 번째 시도가 발생하고 실패하며 세션 변수가 지워지고 두 번째 시도가 실패로 끝나고 변수가 지워집니다. 첫 번째 생각은 이것이 디버깅의 부작용이었고 로컬 웹 서버를 사용하여 디버깅을 요청합니다. 그래서 개발 서버에 넣었고 같은 일이 일어나고 있습니다. 여러 제출/게시물은 동 기적으로 처리됩니다. 나는 심지어 System.Threading.Sleep을 넣어서 세션 변수를 설정 한 직후에 멈추게 할 것이고 여전히 첫 번째 작업이 완료 될 때까지 두 번째 요청을 시작하지 않을 것이다.asp.net mvc 2 multithread
이 동작을 본 사람이 있습니까? 내 이해는 각 요청에 대해 작업자 프로세스가 생성되었으며 이러한 작업이 비동기 적으로 발생할 수 있다는 것입니다.
여기 내 코드는 항상 테스트 목적으로 신용 카드 확인에 실패 언급해야 일부 사이비 코드를
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 "stick"을 보장하기 위해 다른 곳에서 더미 세션 변수를 설정했습니다. 그래서 각 요청마다 세션 ID가 동일하다는 것을 알고 있습니다.
감사
테스트 요청을 어떻게 생성합니까? 그것들이 동기식으로 만들어 질 수 있습니까? – joelt
신속하게 페이지 제출 또는 새로 고침을 클릭합니다. 변수를 설정 한 후에는 스레드 slero가 있으므로 중요하지 않아야합니다. 다음 요청이 수표와 리디렉션을 담당해야합니다. 그러나 요청은 다른 사람이 할 때까지 시작되지 않습니다. –
세션 별 단일 요청 요청 일 수 있습니다. 적어도 고전적인 ASP에는 한계가 있습니다. – svinto