페이지 로드가 완료된 후 ASP.NET 페이지에서 일부 처리를 수행할 수 있나요?

StackOverflow https://stackoverflow.com/questions/1179666

  •  19-09-2019
  •  | 
  •  

문제

로드하는 데 시간이 너무 오래 걸리는 ASP.NET 페이지가 있습니다.약간의 테스트를 통해 서버 측 로깅에는 상당한 시간이 걸리며 (사용자가 로깅 결과를 볼 필요가 없기 때문에) 페이지가 로드될 때까지 로깅을 지연하고 싶습니다.

이를 수행하는 간단한 방법이 있습니까?

페이지에 배치해 보았습니다. Disposed 이벤트가 발생하지 않는 것 같습니다. Unload 이벤트가 발생하는데 너무 빨리 발생합니다.차라리 스레드를 생성할 필요가 없지만 그것이 필요한 경우에는 가능할 수도 있습니다.

그래요 아니다 AJAX를 찾고 있습니다.나는 일반적인 전체 페이지 로드를 수행한 다음 페이지가 로드된 후(클라이언트 측에서 볼 수 있듯이) 조금 더 처리를 수행하고 싶습니다.

도움이 되었습니까?

해결책

이것은 작동하는 것으로 보입니다:

protected void Page_Unload(object sender, EventArgs e)
{
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.Close();
    Thread.Sleep(20000); // Do processing here instead of sleeping :)
    Debug.WriteLine("Done!");
}

Unload 이벤트가 너무 빨리 실행된다고 말씀하셨는데 제 생각엔 제 시간에 딱 맞는 것 같습니다.수동으로 연결을 닫으면 됩니다.플러시도 필수인 것 같습니다. 이는 조금 이상합니다. 닫을 때 플러시가 암시적이라고 생각했기 때문입니다.

요청을 처리하는 프로세스를 바쁘게 유지하여 다음 HTTP 요청을 처리할 수 없기 때문에 몇 가지 단점이 있을 수 있습니다.그러나 IIS7에는 동시 요청 수에 대해 구성 가능한 제한이 있습니다.당신은 단순함을 원했는데, 이것이 가능한 한 간단하다고 생각합니다.

다른 팁

로그 대기열을 가져 와서 로그를 기록하고 자체 스레드에서 로깅을 수행하는 로깅 서비스를 작성하는 것을 고려 했습니까?

이것을 사용하면 모든 로깅이 이전 코드에 있던 곳에 발생하고 로깅 방법을 비동기 호출 할 수 있습니다.

당신은 비동기 프로세스를 찾고 있습니다. Ajax는이과 다른 구현을 허용합니다. Async 및 ASP.Net을 검색하면 수많은 리소스가 있습니다.

기본적으로 귀하의 웹 페이지가 시작되어 별도의 스레드에서 프로세스를 실행하는 동안 UI는 계속 렌더링됩니다.

로그인하기 전에 응답 스트림에서 플러시를 호출하십시오. 전체 응답이 전송 된 후까지 언로드가 해고되지 않습니다. ()를 플러시 한 다음 로그인하면 페이지가 마지막으로하는 것이어야합니다.

효과는 사용자가 페이지를 볼 수 있지만 로그가 완료 될 때까지로드가 완료되지 않아야합니다. 그러나 그들은 페이지와 상호 작용할 수 있으므로 아마도 신경 쓰지 않을 것입니다.

이것은 비동기 스레드에서 가능합니다. 업데이트가있는 경우 2 분마다 확인하는 고객을위한 페이지를 만들었고 페이지를 업데이트했습니다.

어쩌면이 Howto는 당신을 도울 것입니다 :

http://www.eggeadcafe.com/articles/20060918.asp

희망은 당신을 도울 수 있습니다

로그에 로그인하는 대신 문자열을 사용하여 (StringBuilder 사용) 끝을 향해 전체 문자열을 로그로 밀어 넣으십시오.

예외로 인해 페이지가로드되지 않으면 로깅을 잃을 수 있습니다.
문제를 올바르게 이해하지 못했다면 용서하십시오.

어떤 종류의 벌목이 있고 어디로 가고 있습니까?

한 가지 방법은 다른 스레드를 분사하는 것일 수 있습니다 (ASP.NET에서 사용 가능한 스레드의 양을 늘려야 함). ParameterizedThreadStart를 사용하고 로깅에 사용할 객체를 전달할 수 있습니다. (하지만 데이터베이스 연결/명령 개체를 전달하지 마십시오. 나쁘다!)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top