2012-01-04 2 views
4

IIS 7에서 실행되는 MVC3 웹 응용 프로그램이 있습니다. global.asax에서 초기화하는 동안 BuildManager.GetReferencedAssemblies()에서 반환 한 모든 어셈블리를 검색하고 어셈블리에있는 모든 유형 (Assembly.GetTypes())을 초기화해야합니다.IIS 풀 재생, 풀 다시 시작, 응용 프로그램 다시 시작, web.config 업데이트 - 글로벌 asax

때로는 응용 프로그램이 제대로 작동하지 않습니다. 초기화가 발생하지 않았거나 시작 중에 일부 유형이 생략 된 것처럼 동작합니다. 에 의해 다시 시작할 때까지 응용 프로그램이 실패 상태 (I 풀 재활용 후에 그런 일이 생각)이 그 방법을 유지 들어가면 :

  1. 수동 업데이트의 Web.config IIS에서
  2. 수동 다시 시작 응용 프로그램 (일부 공간을 추가) 적어도 - 관리자
  3. IIS 관리자에서 수동 정지 및 시작 응용 프로그램 풀
  4. 자동 풀 재활용

나는 1. 항상 도움이되지만 2,3,4가 indeterministically 작동하는 것으로 나타났습니다 문제의 본질이 결정적이지 않기 때문에 내가 말할 수있는 한 - 일정한 재활용 후에 만 ​​응용 프로그램이 중단됩니다. global.asax 코드와로드 된 어셈블리에 대한 액세스의 관점에서 1과 2,3,4의 차이점은 무엇입니까?

어플 리케이션이 변경되면 애플리케이션이 하위 애플리케이션 (IIS 사이트 트리의 하위 폴더)으로 실행됩니다.

답변

1

일부 상태 정보를 저장하면 문제가 해결 될 수 있으므로 응용 프로그램이 시작이 성공적인지 알 수 있습니다.

응용 프로그램에서 잘못 초기화 된 항목이 있으면 다시 초기화하거나 예외를 throw하고 응용 프로그램을 다시 시작해야합니다.

그것은 당신에게 솔루션을 제공하기 위해 정말 열심히, 그러나 당신이 할 수있는 요약 :

  1. 트랙 초기화.
  2. 응용 프로그램을 예기치 않은 상태로 실행하지 마십시오.
  3. 관리되지 않는 리소스가 코드 어딘가에 릴리스되지 않았는지 (파일 스트림, 데이터베이스 연결 ... 등) 다시 확인하십시오.
  4. 로깅, 로깅, 로깅 ...

이 직접 귀하의 질문에 대답 :

  1. 응용 프로그램 풀을 재활용.
    • HttpApplication (Global.asax)은 응용 프로그램 초기화 이벤트 (시작 이벤트)을 발생시킵니다.
  2. 재활용 응용 프로그램 풀.
    • HttpApplication (Global.asax)은 응용 프로그램 초기화 이벤트 (시작 이벤트)을 발생시킵니다.
  3. 기본적으로 다시 시작할 때까지 모든 들어오는 요청에 대한 응용 프로그램을 중지합니다. 기본적으로 하드 응용 프로그램 풀 재활용.
    • HttpApplication (Global.asax)은 응용 프로그램 초기화 이벤트 (시작 이벤트)을 발생시킵니다.
  4. 재활용 응용 프로그램 풀.
    • HttpApplication (Global.asax)은 응용 프로그램 초기화 이벤트 (시작 이벤트)을 발생시킵니다.

기본적으로,이 작업 중 하나는 동일한 결과를 생성합니다.

IIS 재설정을 시도 했습니까 - iisreset /restart 명령 -? 이렇게하면 잠긴 리소스를 해제하고 원치 않는 루프, 스레드 또는 응용 프로그램을 손상시키는 모든 작업을 중지해야합니다.

+0

"다시 초기화하거나 예외를 throw하고 응용 프로그램을 다시 시작해야합니다." 응용 프로그램 내부의 코드에서 시작 (Application_Start() 사용)이 가능합니까? – PanJanek

+0

@PanJanek 자, Application_Start 초기화를 일부 유틸리티 클래스 또는 이와 유사한 것으로 구현하고이 HttpApplication 이벤트 또는 일부 오류를 복구하기 위해 다시 초기화해야하는 곳에서 호출하는 방법에 대해 설명합니다. 어쨌든 코드 내에서 응용 프로그램 풀을 강제로 재활용 할 수 있습니다 (다른 q & a : http://stackoverflow.com/questions/1645733/programatically-recycle-pool-from-asp-net-application-in-same-pool) –

+0

일부 로깅을 추가하고 초기화가 올바르게 완료되었는지 확인한 후 global.asax가 초기화 코드에서 실행되지 않고 문제가 아닌 것으로 나타났습니다. 어쨌든, 철저한 답을위한 찰흙! – PanJanek

관련 문제