2009-10-20 2 views
1

디스크의 XML 파일을 편집하는 데 사용되는 내부 앱이 있습니다. XML 파일은 ApplicationState에 저장된 오브젝트 모델로로드됩니다.ASP.Net (MVC)에 ApplicationState의 내용 저장

이 데이터를 저장해야합니다. 한 가지 옵션은 사용자가 일부 데이터를 변경할 때마다이 작업을 수행하는 것입니다. 그러나 이것은 약간 비효율적 인 것처럼 보입니다 - 변경이 이루어질 때마다 디스크에 데이터를 기록합니다.

대신 사용자가 브라우저를 종료 할 때마다 웹 서버가 종료되기 바로 전에 알림을받을 수 있습니까? 따라서 데이터는 세션이 끝날 때마다 컴퓨터가 종료 될 때마다 저장됩니다. Global.asax의 Application_End(), Application_Error() 및 Session_End()가이를 제공 할 것이라고 생각했지만 이러한 메서드는 제공하지 않습니다. 불리는 것 같습니다.

답변

0

Session_End가 호출되어야합니다.

실행중인 IIS 버전은 무엇입니까? 아니면 Visual Studio 개발 서버에서 호스팅하고 있습니까?

<sessionState mode="InProc" cookieless="true" timeout="1"/>

  • <system.web>에 추가 추가

    1. 2008

    2. 편집 Web.config의 VS에서 새 웹 사이트를 만들 :

      단계는 화재에 Session_End를 얻을 수 아래 코드와 같은 Global.asax 파일.

      }

    3. Console.WriteLine 호출에 중단 점을 설정

      Console.WriteLine("Session_End");

      {

      void Session_End(object sender, EventArgs e)

      .

    4. F5 키를 눌러 IE 또는 Firefox에서 페이지로드를 확인하십시오.

    5. 대기 1 분 정도.

    6. IDE에서 중단 점을 빨간색으로 강조 표시해야합니다.

  • +0

    Session_End는 InProc 세션 관리를 사용할 때만 호출되며 응용 프로그램이 어떤 이유로 다시 시작되면 전혀 호출되지 않으므로 신뢰할 수있는 것은 아닙니다. –

    +0

    응용 프로그램이 다시 시작되면 Application_End 메소드에서 저장 작업을 수행 할 수 있습니다. – Liam

    +0

    Zhaph가 지적한대로 Session.End 이벤트는 Web.config 파일에서 세션 상태 모드가 InProc로 설정된 경우에만 발생합니다. 세션 모드가 StateServer 또는 SQLServer로 설정된 경우 이벤트가 발생하지 않습니다. – Liam

    관련 문제