2012-07-12 7 views
1

우리의 응용 프로그램에서는 연속적으로 더 많은 데이터를 동시에 비동기 적으로 호출해야하는 페이지가 제공됩니다. 이 호출은 대기 중이고 동일한 세션을 사용하는 호출이 동일한 세션에 둘 이상의 요청 쓰기로 인해 발생할 수있는 복잡성으로 인해 대기 중임을 알았습니다.SessionStateBehaviour에도 불구하고 동시성이 없음

또한 세션이 없거나 세션에 쓸 필요가없는 경우 제어기를 [SessionState(SessionStateBehavior.Disabled)] 또는 [SessionState(SessionStateBehavior.ReadOnly)]으로 설정할 수 있음을 읽었습니다.

요청을 동시에 처리 할 수 ​​있도록 세션에 쓸 필요가 없으므로 이러한 시도했다 또는 그것을 실현하지 않고 세션을 사용하는 경우 예외가 throw됩니다.

아니요. 동일한 사용자의 요청이 계속 대기 중입니다.

내 지시어 [SessionState(SessionStateBehavior.ReadOnly)]이 존중된다는 것을 어떻게 확인할 수 있습니까? 이 문제의 원인은 무엇입니까?

관련성이있는 경우 Orchard의 컨텍스트에서 작업하고 있습니다.

+0

테스트 목적으로 세션을 완전히 비활성화하고 web.config에서 작동하는지 확인하십시오 :''. –

+0

그러나 다른 컨트롤러에 대한 일부 요청에는 세션이 필요하지만 어쩌면 그 시도를 어떻게 든 할 수는 있습니다. – carrier

+0

시도해보십시오. 세션없이 얼마나 좋은지 알 수 있습니다 :-) 여러분의 어플리케이션은 RESTFul과 stateless입니다. 모든 웹 어플리케이션을 디자인해야합니다. –

답변

1

모든 Orchard 경로 요청에 사용되는 기본 HTTP 처리기가 IRequiresSessionState 인터페이스를 구현하기 때문입니다. 모든 요청이 실제로 대기중인 이유입니다 ...

알려진 문제이며 중요한 변경 사항을 의미하지 않는 한 다음 Orchard 버전에서 수정하려고합니다. 세션에 의존하거나 의존 할 수있는 몇 가지 핵심 기능 (외부 및 사용자 지정 번호는 알 수 없음)이 있으므로 IRequiresSessionState 인터페이스를 간단하게 제거 할 수 없습니다. 먼저 리팩터링을해야하며 옵트 인/옵트 아웃 메커니즘을 구현해야합니다.

2

오차드 1.6에서 SessionState 속성은 RouteDescriptor에서 SessionStateBehavior.ReadOnly 또는 SessionStateBehavior.Disabled으로 설정할 수 있습니다.

Routes 클래스에서 컨트롤러에 매핑되는 새 경로를 만들고 위의 값 중 하나 인 SessionStateBehaviors 중 하나만 있으면됩니다. 나중에 SessionState 속성을 가진 컨트롤러를 꾸밀 필요가 없습니다.

관련 문제