2011-02-11 2 views
7

커다란 사용자 기반과 매우 높은 일일 방문자 수를 가진 asp.net webforms + mvc3로 작성된 다소 큰 프로젝트를 관리하고 있습니다. 기본적으로, 주어진 순간에 많은 요청이 있습니다. 처리 MVC 내 컨트롤러 /의MVC 3의 SessionState 특성이 제대로 작동합니까?

하나는 즉시 이미지가 다음과 같은 속성이 적용되었다 크기를 조절 :

[SessionState(SessionStateBehavior.Disabled)] 

이제 컨트롤러에서 작업 세션에 액세스하려고하면 - 그것은 분명히 발생 예외 - 그래서 우리는 지금까지 좋다.

문제는 다음과 같습니다. IIS 작업자 프로세스 창 (Windows Server 2008 R2, IIS 7.5)으로 이동하여이 사이트의 현재 요청을 확인하면이 컨트롤러에서 작업 요청을 볼 수 있습니다. 현재 상태는 State: RequestAcquireState, Module Name: Session입니다. 때로는 이러한 잠금 장치가이 상태에서 1-2 초가 넘는 경우가 있습니다.

컨트롤러에 대한 요청을 상태를 무시하고 애매한 상태로 만들려고 시간을 낭비하지 않는 (그리고 잠긴 것일 수도 있음) 애트리뷰트의 핵심은 아니 었습니까?

여기에 뭔가 잘못하고 있습니까? 아니면 다른 곳에 문제가 있습니까? [주석 마이그레이션]

+0

안녕하세요, 리바이스 님,이 질문에 답변 할 수 있도록 해주시겠습니까? :) –

답변

12

사용자 정의 컨트롤러 공장 또는 경로 처리기를 사용하는 경우, 그들은 컨트롤러의 세션 상태 행동을 알고 있는지 확인하십시오. 컨트롤러에 세션 상태가 필요하지 않은 것으로 표시하려면이 두 구성 요소의 협력이 필요합니다. Out-of-box, DefaultControllerFactory 및 MvcRouteHandler는이 작업을 위해 설계되었습니다. 자세한 내용은 DefaultControllerFactory.GetControllerSessionBehavior 및 MvcRouteHandler.GetHttpHandler를 참조하십시오. 사용자 지정 구성 요소를 작성하는 경우 해당 방법을 영감으로 사용할 수 있습니다.

+1

위대한 대답! 실제로 IRouteHandler에서 파생 된 사용자 지정 경로 처리기를 사용했습니다. 대신 MvcRouteHandler에서 파생되도록 처리기를 변경했으며 기본 재정의와 함께 기본 구현을 사용해야합니다. 감사합니다 :) –

+1

딩 딩 딩 땡. 그 사람에게 상을 주자. –

관련 문제