IIS (7.5 이상) 서버를 사용하다 보면 가끔 아래와 같은 오류를 만나는 일이 생길 수 있다.





다른 ASP.NET 오류들은 어느 페이지 어느 소스 코드의 몇 번째 줄에서 발생한 오류인지까지 상세하게 잘 보여주면서

이런 경우에는 위와 같은 이벤트 로그 몇 줄이 끝이다.


저런 오류를 만나게 되면 퐝당;;; 이러면서 당황하게 된다.

대체 어쩌라고!



>> 참조: http://technet.microsoft.com/en-us/library/cc735271(WS.10).aspx



관련 검색을 해 보면 같은 오류로 어려움을 겪고 있다는 글들이 잔뜩 나오는데,

정작 도움이 될 만한 내용은 없다.
IIS를 디버깅 해 보라는 둥... 쓰잘 데 없는 시간 낭비성 가이드만 수두룩...

그런데, 알고 보면 쉽다.


WAS는 기본적으로 Windows Process Activation Service라는 놈과 통신을 하면서 자기가 살았는지, 정상적으로 서비스하고 있는지 체크를 하는데, 그게 안 될 정도로 오류 상황으로 빠졌다는 뜻이다.


즉, 위 오류는 일반 응용 프로그램에서 만나게 되는 "Stack overflow" 오류와 상당히 유사한 종류라고 생각하면 된다.

즉, 어딘가에서 무한 루프가 걸렸거나 처리할 수 없는 요청을 날려서 죽었다는 뜻이다.


그런데, 진짜 무한 루프처럼 소스 코드 내의 특정 부분에서 for 문이나 do while 문 같은 데서 걸린 것이라면

당연히 "Stack overflow" 오류가 발생했겠지만, 이 경우는 아주 조금 다르다.


대표적으로 볼 수 있는 예가 Server.Transfer 문을 잘 못 사용한 경우다.


AA.aspx -- code behind: AA.aspx.cs Inherits: AA

AB.aspx -- Inherits: AA


이런 식으로 내부 소스 코드는 하나인데, 웹 파일(ASPX)는 여러 개를 사용하는 경우,

AA.aspx.cs 코드 내에서 Server.Transfer 문을 이용해서 AB.aspx로 보낸다거나 할 경우에 이 오류가 발생한다.

Server.Transfer는 웹 파일(ASPX)을 거치지 않고 곧바로 내부 소스 코드를 호출하게 되는 방식인데

자기가 자기 스스로에게 공을 던지면서 난 공에 대해서는 더 이상 모른다고 하는 경우가 되겠다.

(보통 이런 모델은 ASPX를 사용할 때는 잘 없는 경우인데, MVC를 사용하는 경우에는 빈번하다.

ASPX에서는 모바일 페이지와 PC용 페이지가 따로 서비스 되는 경우가 거의 전부일 듯.)


문제 해결은 간단하다.


이와 같은 경우에는 Response.Redirect 문으로 바꾸거나, 아니면 AB.aspx.cs 소스 코드를 따로 만들어

Server.Transfer 문으로 정상 전달이 되도록 구성하는 식으로 문제를 해결하면 된다.




Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]