programing

Application_Start와 Application_OnStart의 차이

goodsources 2023. 8. 24. 21:59
반응형

Application_Start와 Application_OnStart의 차이

ASP를 추가하는 중입니다.기존 ASP에 대한 NET MVC 코드입니다.NET 웹폼 프로젝트.다양한 튜토리얼에서는 Global.asax의 Application_Start()에서 호출되는 메서드에 라우팅을 추가할 것을 제안합니다.My Global.asax에는 이미 일부 설정 코드가 있는 Application_OnStart(Object,EventArgs) 메서드가 있습니다.

Start와 OnStart를 모두 사용하려고 하면 OnStart가 호출되지 않고 설치가 실패하여 오류가 발생합니다.둘 중 하나를 선택해야 할 것 같습니다.

제 질문은: 어떤 것을 사용해야 할까요?그들 사이의 차이점은 무엇입니까?그들은 다른 시간에 전화를 받습니까?

(참고: 이 글을 쓰는 시점에서 상위 3개의 Google 히트는 쓸모가 없거나 오해의 소지가 있습니다.스택 오버플로가 이 문제를 해결할 수 있기를 바랍니다.)

기존(레거시) ASP에는 global.asa 파일에 정의된 경우 응용 프로그램 수명 주기 동안 지정된 지점에서 실행되는 소수의 특수 함수 이름이 있습니다.이는 다음과 같이 정의됩니다.

  • Application_OnStart - 응용 프로그램이 첫 번째 HTTP 요청을 수신할 때 바로 앞에서 한 번 실행됩니다.ASP 파일이 처리됩니다.
  • Application_OnEnd - 모든 요청이 처리된 후 애플리케이션 종료 중에 한 번 실행됩니다.
  • Session_OnStart - 고유 사용자 세션이 시작될 때마다 실행됩니다.사용자/클라이언트가 쿠키를 사용할 수 없는 경우 ASP는 기존 세션을 식별하는 세션 쿠키를 탐지하지 않으므로 모든 요청에 대해 이 쿠키가 실행됩니다.
  • Session_OnEnd - (이론적으로!) 사용자 세션이 만료될 때마다 실행됩니다.행운을 빌어요.

이들은 기본적으로 고전적인 ASP 런타임에 유선 연결되어 있습니다. 변경할 수도 없고 다른 메서드를 이 이벤트에 첨부할 수도 없습니다.

ASP에는 ASP라는 NET에는 다음과 같은 것이 있습니다.AutoEventWireup반사를 사용하여 특정 명명 규칙을 준수하는 메서드를 찾고 ASP에서 발생한 일치 이벤트에 대응하여 이러한 메서드를 실행합니다.NET 런타임.가장 일반적인 예는 다음과 같습니다.Page_Load메소드 - 페이지 수명 주기 동안 로드 이벤트를 발생시키는 페이지 클래스에 대한 응답으로 자동으로 호출됩니다.

동일한 기술을 사용하여 처리기를 응용 프로그램 수준 수명 주기 이벤트에 연결합니다.중 변수를 ModuleName_OnEventName이라는 .()또는(object sender, EventArgs e)

여기 재미있는 부분이 있습니다. 둘 이상의 일치 방법을 정의하면 파일에 가장 최근에 나타나는 방법만 실행됩니다.(기본적으로 마지막 방법이 이깁니다.)

따라서 global.asax.cs 이 다음과 같이 표시됩니다.

public class Global : System.Web.HttpApplication {
    protected void Application_Start() {
        Debug.WriteLine("A: Application_Start()");
    }

    protected void Application_Start(object sender, EventArgs e) {
        Debug.WriteLine("B: Application_Start(object sender, EventArgs e)");
    }

    protected void Application_OnStart() {
        Debug.WriteLine("C: Application_OnStart()");

    }
    protected void Application_OnStart(object sender, EventArgs e) {
        Debug.WriteLine("D: Application_OnStart(object sender, EventArgs e)");
    }
}

디버깅 출력에 D 메시지가 표시됩니다. 해당 블록의 마지막 방법을 주석 처리하면 대신 C 메시지가 표시됩니다.

따라서 - 원하는 명명 규칙을 사용하지만 둘 이상을 정의하면 원본 파일에서 마지막으로 나타나는 명명 규칙만 실행됩니다.저는 개인적으로 계속할 것입니다.Application_Start(object sender, EventArgs e)Visual Studio 프로젝트 템플릿 및 대부분에서 생성되는 서명이기 때문입니다.NET 설계/코딩 도구.

ASP의 마이크로소프트 문서에 따르면.사용해야 하는 넷앱 수명 주기Application_Start global 파일:method in global.asax 파일:

Application_StartASP의 첫 번째 리소스(페이지 등)가 호출될 때 호출됩니다.NET 신청이 요청되었습니다.Application_Start 메서드는 응용 프로그램의 수명 주기 동안 한 번만 호출됩니다.이 방법을 사용하여 캐시에 데이터 로드 및 정적 값 초기화와 같은 시작 작업을 수행할 수 있습니다.

W3 학교에서는 ASP(레거시 ASP?)에 대해 자세히 설명합니다.이 메서드는 Global.asax가 아닌 Global.asa로 이동합니다.

Application_OnStartApplication_OnStart 이벤트는 첫 번째 새 세션이 생성되기 전에(Application 개체가 처음 참조될 때) 발생합니다.이 이벤트는 Global.asa 파일에 저장됩니다.

답변에 대한 의견을 참조하십시오. 이 답변은 레거시 ASP에 대한 의견인 반면 ASP에 대한 의견입니다.NET.

Application_OnStart:

Application_OnStart 함수는 .asp 파일이 처리되기 전에, 텍스트나 그래픽이 렌더링되어 사용자의 브라우저로 전송되기 전에 호출됩니다.이 함수 내에서 Active Server Pages Server 개체의 CreateObject 메서드에 대한 다음 호출은 CDO Rendering Library Rendering Application 개체를 만듭니다.이 호출이 성공하면 objRenderApp 변수에 새 개체에 대한 포인터가 포함됩니다.

제가 찾을 수 있었던 모든 참조는 .asp 페이지를 참조합니다.

Application_Start

Application_Start 메서드와 Application_End 메서드는 HttpApplication 이벤트를 나타내지 않는 특수 메서드입니다.ASP.NET은 각 HttpApplication 인스턴스가 아닌 응용 프로그램 도메인의 수명 동안 한 번 호출합니다.

이 페이지는 .aspx 페이지를 참조합니다.그래서 당신이 MVC를 사용하고 있고 global.asax를 언급하고 있다면 이것이 당신이 사용해야 할 것입니다.

언급URL : https://stackoverflow.com/questions/2058621/difference-between-application-start-and-application-onstart

반응형