2011-05-09 8 views
4

WebForms과 WCF 서비스가 모두있는 웹 프로젝트 설정이 있습니다. 매번 응용 프로그램이 재활용되는 것처럼 보일 때마다 모든 싱글 톤 객체와 세션 값을 잃어 버리는 문제가 있습니다. 타임 아웃 문제는 아니지만 메모리 누출 일 수 있습니다. 우리는 1 분 정도 앱을 사용할 수 있으며, 그 다음엔 그냥 모든 것을 잃어 버릴 수 있습니다.ASP.NET 응용 프로그램 풀 재활용 문제

변경 사항에 대한 디렉토리 모니터링을 시도했지만 파일 시스템에 변경 사항이 전혀 없음을 발견했습니다. 또한 Application_Error에 중단 점을 넣었으므로 오류가 발생하지 않습니다.

나는이 문제를 해결하기 위해 이틀 동안 인터넷 검색을 해왔다. 응용 프로그램은 잘 작동하는 이전 프로젝트의 직접 복제입니다. 한가지 주목할 점은 내가 마지막 프로젝트 인 nHibernate를 백엔드에 사용했고이 프로젝트에서 Linq를 SQL로 전환했다는 점입니다. DataContext의 isntance를 내 서비스 호출 내에서 희미하게 처리하고 값을 반환하기 전에 아무 것도 컨텍스트를 다시 설정하지 않기 때문에 DataContext를 제대로 처리하지 못하는 것으로 나타났습니다. 따라서 닫히지 않을 수도 있습니다. 나는 "저장소"클래스에 datacontext를 저장하는 대신 operationcontext에 저장하고 Application_EndRequest에 명시 적으로 처리했습니다. 그래도 문제가 해결되지 않았습니다.

누구나 내가 봐야 할 제안이나 장소가 있습니까?

** 업데이트 ** : 내 문제를 발견했다고 생각합니다. EntitySet을 사용하는 객체가 있고 목록을 반환하는 linq 쿼리와 함께 직렬화 가능한 IList 속성을 사용하여 해당 객체를 직접 직렬화합니다. 데이터를 반환하기 전에 명시 적으로 내 datacontext를 처리하려고하면 datacontext가 더 이상 활성 상태가 아니기 때문에 해당 EntitySet을 직렬화하는 문제로 실행되고 있습니다. EntitySet 대신 일반 목록을 사용하여 새로운 빈 개체에 데이터를 복사 해보고 이것이 내 datacontext를 제대로 닫고 내 문제를 해결할 수 있는지 확인합니다.

+1

위의 응용 프로그램은 해당 응용 프로그램 풀만 사용하고 있습니까? 아니면 다른 응용 프로그램과 풀을 공유합니까? – Dimitri

+0

나는이 문제를 이미 경험했다고 가정합니다 : [응용 프로그램 풀이 예기치 않게 재활용 될 수있는 일반적인 이유] (http://blogs.msdn.com/b/johan/archive/2007/05/16/common-reasons-why -your-application-pool-may-unexpectedly-recycle.aspx) – R0MANARMY

+0

공유 호스팅 또는 자신의 웹 서버입니까? –

답변

0

IIS7 콘솔에서 특정 응용 프로그램 풀을 선택하고 왼쪽의 작업 창에서 "Recycling ..."을 선택하십시오. 응용 프로그램 풀이 재생되는 방법과 이벤트 로그에 리사이클 이벤트를 기록하는 방법을 정의 할 수있는 마법사입니다 (마법사 2 페이지).

+0

죄송합니다. 분명히해야합니다.그것은 비주얼 스튜디오에서도 디버깅 할 때 개발 웹 서버에서 발생합니다. IIS의 설정이 아닙니다. 나는 그것이 내 web.config의 설정이거나 아마도 내 코드의 문제 일 것이라고 확신한다. –

1

업데이트는 실제로는 다른 질문이지만, ORM에서 벗어난 것들을 직렬화해야합니다. 많은 잠재적 인 악몽이 있습니다. 자신에게 몇 가지 DTO를 구축하십시오.

+0

DTO를 작성 했으므로 DTO 만 직렬화됩니다. 나는 또한 적절하게 DataContext를 닫고있다. 문제는 여전히 불행히도 남아 있습니다. –

관련 문제