페이지에서 저장 프로 시저를 실행하고 페이지가 닫힌 경우에도 "끝내도록"하는 방법을 알고 싶습니다. . 데이터를 반환 할 필요가 없습니다.ASP.NET 페이지에서 오랫동안 실행되는 sproc (반환 할 필요가 없음)을 실행하십시오.
1
A
답변
2
데이터베이스 중심의 옵션은 다음과 같습니다
- 수행 할 장기 실행 작업의 목록 (또는 큐)를 포함하는 테이블을 만듭니다.
- 응용 프로그램에 원하는 경우 언제든지 항목을 추가하도록합니다. 그게 전부입니다. 일단 로그인하고 입력하면 웹 세션 또는 상태 데이터를 유지할 필요가 없습니다.
- 실행해야 할 작업이 있는지 1, 2, 5 분마다 확인하도록 SQL 에이전트 작업을 구성하십시오.
- 아직 시작되지 않은 항목이있는 경우 가장 최근 항목을 시작으로 표시하고 시작하십시오.
- 완료되면 완료 됨으로 표시하거나 삭제하십시오.
- 실행할 다른 항목이 있는지 확인하십시오. 있다면, 반복; 그렇지 않은 경우 작업을 종료하십시오.
용량에 따라 목록에서 항목을 동시에 처리하면서이 작업의 여러 복사본 (달리 이름이 지정됨)을 실행할 수 있습니다.
는 (그것이 더 관리자 형 트릭입니다. 매우 긴 실행 방법이 방법을 사용했지만,이 상황에 맞는 적절한 수 있습니다.)
1
먼저 명령을 준비한 다음 스레드 풀에 대기열에 넣습니다. 스레드가 HTTP 컨텍스트 또는 다른 http 내장 개체에 의존하지 않는지 확인하십시오. 요청이 스레드 전에 완료되면; 컨텍스트가 사라질 수 있습니다.
1
는 Asynchronous procedure execution를 참조하십시오. 이것은 ASP 프로세스가 충돌하더라도 실행을 보장하는 유일한 방법입니다. 또한 자체 조정 기능을 통해로드가 급증 할 때 처리 할 수 있으며 요청이 대기열에 들어가고 리소스를 사용할 수있게 처리됩니다.
솔루션의 요지는 클라이언트 연결이없는 SQL Server의 백그라운드 스레드에서 저장 프로 시저를 실행할 수있는 SQL Server Activation 개념을 사용하고 있습니다.
SqlClient asynch 메서드 또는 CLR 스레드 풀을 기반으로하는 솔루션은 신뢰할 수 없으며 ASP 프로세스가 재생 될 때 호출이 손실되고 메모리 사용으로 인해 프로세스 재활용을 실제로 트리거하는 요청의 메모리 내 큐를 구축합니다 .
신뢰할 수있는 테이블 및 에이전트 작업을 기반으로하는 솔루션이 더 뛰어나지 만 정품 인증 기반 솔루션의 자체 조정 기능이 부족합니다.
불행히도 우리는 현재 SQL 2000을 사용하고 있음을 알게되었습니다. 우리는 결국 2005 년으로 이주 할 것이지만 우리는 아직 거기에 있지 않습니다. –
필립이 제안한 것처럼 테이블과 에이전트 작업을 사용하는 것이 좋습니다. –