문제

나는 w3wp 메모리에만 상주하기 때문에 w3wp 소유자 프로세스가 재활용될 때 모든 InProc 세션 데이터가 항상 사라진다는 것을 이해합니다.

프로세스 외부에서 재활용이 발생할 때 세션 데이터를 캐시한 다음, 세션이 다시 시작될 때 세션을 다시 주입(및 재구축)하는 것이 가능한지 궁금합니다.그렇게 하면 필요할 때 상태 서버와 같은 외부화의 안정성과 함께 InProc의 속도를 얻을 수 있습니다.이것이 가능한가?

도움이 되었습니까?

해결책

아니요, 불가능합니다.진행 중인 세션 상태 또는 캐시를 "준비"하는 API는 없습니다.어쨌든 그러한 솔루션은 신뢰할 수 없습니다.앱이 마지막으로 수행한 작업이 현재 세션 상태를 내보내는 것이라고 보장할 수 없으므로 어쨌든 가져온 데이터가 현재 상태라고 믿을 수 없습니다.

웹 애플리케이션과 동일한 호스트에서 out-of-proc 상태 서버를 사용할 수 있습니다.그러면 웹 애플리케이션은 상태 정보를 그대로 유지하면서 자유롭게 재활용할 수 있습니다.이는 SQL Server를 사용하여 세션을 관리하는 것보다 훨씬 빠릅니다. SQL의 오버헤드를 처리하거나 다른 시스템으로의 네트워크 전송을 처리할 필요가 없기 때문입니다. 처리 중인 세션 상태보다 더 나쁜 유일한 방법은 데이터가 프로세스 경계를 ​​넘어 마샬링하지만, 빠르게 변화하는 엄청난 양의 세션 데이터가 없는 한 이는 전혀 눈에 띄지 않습니다.

다음과 같은 다른 대안도 있습니다. "Velocity"라는 Microsoft 프로젝트 코드 또는 ScaleOut 소프트웨어의 SessionServer (다른 것 중에서도 확신합니다) SQL Server를 사용하지 않고도 서버 팜의 서버 간에 세션 상태나 캐시를 동기화할 수 있는 분산 캐싱 메커니즘을 제공합니다.

다른 사용자가 게시한 내용과 달리 저는 가능하다면 ViewState를 사용하여 세션 데이터를 저장하지 않을 것입니다.우선, 이는 실제 세션 상태가 아닙니다. 사용자가 뒤로 또는 앞으로 이동하면 세션 상태가 손실될 수 있습니다.둘째, 상당히 안전하지 않습니다.셋째, 남용할 경우 페이지가 엄청나게 팽창합니다.

다른 팁

어쩌면 충분한 정보를 쿠키 (또는 ViewState)에 저장하여 작업자 프로세스가 재활용 된 경우 해당 데이터를 기반으로 세션을 다시 만들 수 있습니다.

또는 세션의 일부를 저장하는 나만의 상태 서버 (예 : Windows 서비스)를 만들고 원격 또는 유사한 것을 통해 웹 앱 에서이 서비스에 액세스 할 수 있습니다.

의도 인 경우 세션 상태에 SQL 서버를 사용해야합니다. 당신이 원하는 것은 호스트 프로세스의 완전한 결말에서 회복 할 수있는 세션입니다. Inproc 또는 Stateserver는 일단 내려 가면 모든 데이터를 잃는다는 것을 지원하지 않습니다. 당신은 당신 자신의 상태 방법을 쓸 수 있지만, 그것은 노동력이 있습니다. 당신이 그렇게하고 싶다면 다음은 다음과 같습니다.

http://www.exforsys.com/tutorials/asp.net-2.0/asp.net-2.0-customizing-the-session-state-mechanism.html

당신이하고 싶은 것은 세션을 전혀 사용하지 않고 ViewState에 더 의존하는 것입니다. 트래픽 사이트가 높은 경우 작업량을 클라이언트에게 밀어내는 좋은 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top