응용 프로그램 재활용으로 인한 ASP.NET 세션 손실을 프로그래밍 방식으로 진단 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/401311

  •  03-07-2019
  •  | 
  •  

문제

로컬로 잘 작동하지만 원격 서버에 배포 될 때 때때로 세션 상태를 잃는 ASP.NET 2.0 (vs2005) 응용 프로그램이 있습니다.

IIS가 응용 프로그램을 재활용하여 사용자의 세션 상태를 날려 버릴 수있는 문제가 있다고 생각합니다. 그러나 서버는 제어하에 있지 않으므로 IIS 관리자를 발사하고 응용 프로그램 설정을 확인할 수 없습니다. 물론 또 다른 가능한 원인은 어떤 이유로 든 ASP.NET 세션 쿠키를 거부하는 클라이언트 때문입니다.

(우리는 단순한 앱이기 때문에 코드에서 오류를 거의 배제했습니다. 세션 객체에서 아무것도 제거하려고 시도하지는 않지만 물론 유명한 마지막 단어입니다.)

이것을 프로그래밍 방식으로 어떻게 진단 하시겠습니까?

나는 주로 문제를 진단하는 방법을 알아 내려고 노력하고 있습니다. 지나치게 열성적 인 응용 프로그램 재활용이 범인이라면 코딩하기가 너무 어렵지 않아야합니다.

ASP.NET 개발자에게는 이것이 일반적인 문제라고 확신합니다.

도움이 되었습니까?

해결책

다음은 일부 설정을 변경할 수있는 경우 문제를 해결하는 데 도움이 될 수있는 몇 가지 링크입니다.

IIS 6.0의 로깅 작업자 프로세스 재활용 이벤트 (IIS 6.0)

ASP.NET 응용 프로그램 종료 이벤트 로깅

다른 팁

Global.asax Application_Start 메소드에 로깅 코드를 추가하면 응용 프로그램이 다시 시작되어 손실이 발생하는시기를 확인할 수 있습니다 (또는 최소한 세션이 시작되는 경우 세션이 시작될 때 알 수 있습니다. 동시에 길을 잃었을 때, 당신은 당신의 범인을 알고 있습니다).

해결 방법은 Proc Session State에서 사용하는 것입니다 (서버를 제어하지 않으면 SQL 기반이어야 할 것입니다). 세션에 저장하는 모든 것이 직렬화 가능해야하지만 세션 손실을 일으키는 앱 재시작 문제를 해결하기 때문에 코드에 약간의 추가 작업이 필요합니다.

응용 프로그램 풀의 둘 이상의 작업자 스레드 (웹 가든)에 대해 IIS는 세션 상태를 잃을 수 있습니다.

세션이 손실되는 시나리오를 찾았습니다. 첫 번째 기회 예외를 제기하지만 해당 라인에 오류가 표시되지는 않습니다. 그 대신에 처리되지 않은 예외로 인해 세션이 무효화되고 세션 검색시 오류가 표시되어 디버깅을 속이고 있습니다.

힌트 : 시스템을 테스트하여 파괴적으로 실패합니다. 관련없는 시나리오에서 충분한 정크를 입력하면 로컬 코드 기반 에서이 기계를 재현 할 수 있습니다 ... :) :)

도움이되기를 바랍니다. Hydtechie

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