잊지 않겠습니다.

'ASP .NET Session State Service'에 해당되는 글 1건

  1. 2009.03.03 IIS에서의 Session 수명 주기에 따른 설정 변경
  ASP .NET에서의 Session의 생명주기는 In-of-Process 단위로 움직이게 된다. 그런데, 이 Session의 처리주기가 In-of-Process 단위로 움직이는 경우에 IIS 6에서 사용되는 process recycling에 의해서 session이 끊기게 된다. Session을 이용한 상태의 저장시에 치명적인 오류를 가지게 되는데. 이러한 에러상황을 피하기 위해서는 다음과 같은 방법들이 사용 가능하다. 


1. IIS의 process recycling을 중지 시킨다.

1) 인터넷 정보 서비스 관리자를 띄운다 
2) 응용 프로그램 풀을 선택하고 새로만들기-응용프로그램 풀을 선택하여 새로운 응용 프로그램 풀을 만들어 준다. 
3) 새 응용프로그램의 등록정보를 열고 재생 탭의 항목을 모두 언체크 한다. 
4) 성능 탭의 웹 가든을 1로 맞춰준다 
5) 인터넷 정보 서비스 관리자에서 세션오류가 난 사이트의 등록정보를 연다 
6) 홈 디렉터리 탭의 응용 프로그램 설정 부분에 있는 응용 프로그램 풀을 2번 과정에서 만든 풀을 선택해준다. 

이 과정을 거치면 IIS 6에서도 세션 사용이 가능하다. 하지만 IIS 6의 강점인 자동 리사이클링이 동작하지 않게 세팅하는 것이므로 적용을 최소화 할 수 있도록 한다. 


2. Session 관리 방법을 변경한다. 

ASP.NET에서는 다양한 Session의 관리 방법을 제공한다. 기본적으로 제공되는 In-of-Process 단위의 Session 뿐 아니라, Out-of-Process 단위의 Session 역시 제공한다. Out-of-Process 단위의 Session의 사용은 ASP .NET State Service를 사용하는 방법과 MS-SQL을 이용한 Session의 저장 방법이 있다. 

1) ASP .NET Session State Service 
a. Windows Service에서 ASP .NET Session State Service를 활성화시킨다. (기본적으로 사용하지 않음으로 stop 되어있는 서비스이다.) 

b. web.config에 다음과 같은 항목을 추가한다. 
<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424">
</sessionState>

* 주의할점은 dual core process의 경우에는 session과 working process간에 dead-lock이 일어날 수 있다. 이 경우에는 webgarden 속성이 반드시 false여야지 된다. 이에 대한 자세한 내용은 이곳에서..

2) MS-SQL을 이용한 Session 저장
DB를 이용한 Session의 저장 역시 가능하다. DB를 이용하게 되면 일단 속도는 떨어질 수 있지만, 다른 어떤 방법보다 안전한 Session의 이용이 가능하게 된다. (SQL Agent를 이용하기 때문에 SQL Express 버젼에서는 사용이 애매해진다. 시간이 오래된 Session의 자동정리 등 기능을 많이 사용할 수 없게 된다.)

a. command를 이용해서 ASP .NET Session Database 작성
aspnet_regsql.exe -S <machine> -E -ssadd -sstype p

b. web.config에 다음과 같은 항목을 추가한다.
<sessionState mode="SQLServer" sqlConnectionString="server=localhost; uid=*******; pwd=********* ">
</sessionState>

* 주의할 점은 반드시 Serialize 되는 항목만 Session에 저장 가능하다. 


Posted by Y2K
,