2010-07-08 7 views
0

두 개의 부하가 분산 된 서버에서 실행되는 ASP.NET 응용 프로그램이 있습니다. 한 그룹의 고객을 제외하고 모든 것이 잘 작동합니다. 이 모든 고객은 같은 회사에서 왔습니다. 무작위로 처리되지 않은 NullReferenceException 오류가 발생합니다. 그것은 무작위로 무작위로 일어난다. 세션이 완전히 사라진 것처럼 보입니다. 이것은 특정 사용자 그룹에 대해서만 발생하기 때문에 나는 그 환경과 관련이 있다고 가정해야합니다. 사용자가 IE6, IE7, IE8 및 FF로 들어오는 것을 보았습니다. 모든 경우에 오류가 발생합니다.하나의 특정 사용자에 대해서만 ASP.NET 세션이 손실되었지만

이 문제를 해결하는 방법에 대해 100 % 확신하지 못했습니다. 누구든지 아이디어가 있습니까? 편집

: 세션 "에서 InProc"로 설정되어

<sessionState mode="InProc" cookieless="false" timeout="20" /> 
+0

어떤 부하 분산 메커니즘을 사용하고 있습니까? –

답변

1

나는 porblem이있는 사용자와 접촉했다. 나는 브라우저를 열고 whatsmyip.org에 가서 그의 IP 주소가 무엇인지 말해달라고했다. 그런 다음 몇 번 화면을 새로 고쳐달라고했습니다. IP 주소가 바뀌 었습니다. 그것은 두 개의 다른 IP 주소 사이를 계속 전환했습니다. 이것은 그의 기계의 IP 주소가 아니라 두 개의 다른 프록시의 IP 주소입니다. 각 요청은 하나 또는 다른 형식으로 나타날 수 있습니다.

로드 밸런서 (Zeus - 저는 네트워크 사용자가 아닙니다)는 IP 주소를 사용하여 세션 선호도 (sticky connection)를 설정하도록 설정되었습니다. 로드 밸런서가 쿠키를 삭제하고이를 사용하여 세션을 유지 관리하고 모든 것이 올바르게 작동하도록 설정을 변경했습니다.

0

팜의 모든 서버가 동일한 SQL 데이터베이스에서 찾고있는 것을 확인, 세션 상태를 저장하는 SQL을 사용하는 경우 - 나는했습니다 이전에 이것에 의해 잡혀 있었고 그것을 해결하는 데 꽤 오래 걸렸습니다!

편집 : 웹 팜에서 실행 중일 때 실제로는 StateServer으로 설정해야 할 수도 있습니다. MSDN에서 Session-State Modes을 참조하십시오.

+0

세션이 InProc (질문이 수정 됨)로 설정되었습니다. 감사합니다. – HitLikeAHammer

0

로드 균형 조정이 가장 적은 작업량의 서버에 대한 모든 공격을 지시하는 것을 기반으로하는 경우 InProc이 작동하지 않습니다. StateServer 또는 SQLServer 모드를 사용해야합니다.

클라이언트의 첫 번째 공격이 서버 A에서 새 세션을 시작한다고 가정하면 동일한 클라이언트의 두 번째 공격이 서버 B로 이동하여 서버 B의 서버 A에서 세션 쿠키를 제공 할 수 있습니다 인정하지 않습니다.

부하가 가장 많은 서버에 첫 번째 히트가 할당되었지만 같은 세션의 후속 히트가 동일한 서버로 지정되는 '끈적'(또는 클라이언트 선호도)로드 밸런싱이있는 경우 InProc은 여전히 ​​작동해야합니다 작업.

+0

우리는 끈적 연결을 사용하고 있습니다. 그것은 단지 사용자의 certian 그룹에 대한 사실은 그게 그 네트워크에 뭔가 있다고 생각합니다. 아마 IP 주소는 요청이나 그와 비슷한 것으로 변경 될 것입니다. – HitLikeAHammer

1

InProc 세션은 서버간에 공유되지 않으므로이 그룹의 사용자가 한 서버에서 다른 서버로 이동하는 것처럼 들리지만 다른 서버는 그렇지 않습니다. 어쩌면로드 밸런서가 IP 주소 같은 것을 사용하여 끈적한 세션을 달성하려고 시도하고 있으며이 조직이 해당 정보를 차단하고있는 것일 수 있습니다.

+0

이와 비슷한 것이 문제 일 수 있습니다. 가정 할 때 애플리케이션을 수정하기 위해 할 수있는 일이 있습니까? – HitLikeAHammer

+0

가장 쉬운 방법은 다른 세션 상태 모드 중 하나를 설정하는 것입니다 (둘 다 서버간에 공유 할 수 있음). 서버/데이터베이스에서 수행 할 수있는 작업의 제약으로 인해 가능하지 않은 경우 사용자의 데이터를 저장 한 다음 숨겨진 형식으로 전달되는 키의 종류에 따라 직접 검색해야합니다 필드 또는 URL을 - 또는 아마도 이러한 페이지를 완전히 시도 할 수 있습니다. 이 옵션들 중 하나는 많은 장소에서 이미 세션을 사용하고 있다면 - 많은 추가 노력이 필요합니다 - 추가 된 보안 문제 등 – FinnNk

관련 문제