2009-07-23 7 views
23

주어진 컨트롤러 또는 액션이 ​​세션 상태를 읽기 전용으로 사용하도록 지정하는 방법이 있습니까? "예전"ASP.NET에서 우리는 다음과 같은 작업을 수행했습니다.ASP.NET MVC에서 읽기 전용 세션 지정

<%@ Page EnableSessionState="ReadOnly" %> 

ASP.NET MVC가 있습니까? 내 응용 프로그램이 동일한 클라이언트의 여러 요청을 동시에 처리 할 수 ​​있도록하고 싶습니다. 세션을 완전히 끌 경우 내 경우에는 옵션이 아닙니다.

+0

중복 가능성 [세션 비활성화 상태 요청 당 ASP.Net MVC에서 (http://stackoverflow.com/questions/1464203/disable-session-state-per-request-in-asp -net-mvc) – Liam

답변

8

비슷한 질문은 여기에 질문을 받았다 : Disable Session state per-request in ASP.Net MVC

허용 대답 거래를 궁극적으로 세션에 바인딩 건너 뜁니다 사용자 지정 경로 처리기를 만드는. 이 질문에 정확히 답하지는 않습니다 (읽기 전용 세션 액세스를 사용하기 위해 여러 작업을 선언하는 방법). 그러나 언급 할만큼 충분히 관련있는 것으로 보입니다.

1

이것은 약간 까다로울 수 있습니다. 세션 상태를 설정하는 것이 IHttpHandler 수준에서 일어난 일입니다. 사용자 지정 처리기를 사용하면 IReadOnlySessionState와 같은 마커 인터페이스를 사용하여 읽기 전용 세션 상태 만 필요하다는 것을 선언하여 세션 상태를 지정할 수 있습니다. 컨트롤러에 추가하여 어떻게 작동하는지 볼 수 있습니다. 나는 ASP.NET MVC 컨트롤러가 IHttpHandler가 유선으로 된 후에 잘 발생하기 때문에 그럴 수 없다고 생각하지만, 그럴 가치가있다.

또 다른 해결책은 자신의 클래스에 세션 상태 변수를 래핑하고 읽기 전용 버전을 노출시켜 읽기 전용으로 적용하는 것입니다. 여러 요청을 통해 액세스하는 것은 문제가되지 않지만 여러 각도에서 동일한 세션 변수에 쓰려고하면 경쟁 조건을 얻을 수있는 것이 옳습니다.

+0

목표는 변수를 읽기 전용으로 만드는 것이 아니라 목표는 단일 클라이언트의 MVC 페이지에 여러 개의 동시 요청을 허용하는 것입니다. 읽기 전용 래퍼에서 세션 변수를 래핑하는 것은 도움이되지 않습니다. – Mark

+0

다음 업데이 트가있을 때 경쟁 조건을 피하지 않으려면 ReadOnly가 왜 중요합니까? 모든 페이지가 세션 데이터를 읽는 중이라면 동시 요청을하는 것이 상처를주지는 않습니다. 모든 페이지가 세션을 동시에 업데이트해야하는 경우 ReadOnly로 항목을 래핑하는 것이 도움이되지 않습니다. –

+1

읽기 전용 세션이 지정되지 않으면 ASP.NET 런타임에서 동일한 클라이언트의 여러 요청을 허용하지 않기 때문에 읽기 전용이 중요합니다. 읽기 전용 세션을 지정하지 않으면 동시 요청을 처리 할 수 ​​없으며 ASP.NET MVC에서이를 수행하는 방법을 묻습니다. – Mark

-2

모델에서 정적으로 "읽기 전용"으로 설정하려는 데이터는 어떻게 설정합니까? 이 방법으로 동일한 데이터로 MVC에 동시에 요청할 수 있습니다.

+2

스레딩 문제는 내가 여기서 풀려고하는 것이 아니며 문제는 ASP.NET이 한 세션의 상태가 해제되어 있다고 생각하지 않는 한 한 웹 응용 프로그램이 같은 클라이언트의 여러 요청을 동시에 처리하지 못하게한다는 것입니다 또는 요청을 처리하는 특정 처리기가 세션 상태를 수정하지 않는다고 가정합니다. 모델의 필드를 정적으로 만들면 ASP.NET에 세션 상태가 읽기 전용임을 알리지 않습니다. – Mark