2010-08-23 8 views
0

ASP.NET 웹 페이지에서 시작하여 장시간 실행되는 프로세스를 처리하는 가장 좋은 방법을 알고 싶습니다.ASP.NET에서 장기 실행 프로세스 다루기

프로세스는 다양한 단계 (예 : 서버에 파일 업로드, SSIS 패키지 실행, 일부 저장 프로 시저 실행 등)로 구성 될 수 있으며 프로세스가 완료되는 데 최대 2 시간이 소요될 수 있습니다.

WCF 서비스를 사용하여 비동기 실행을하는 경우 프로세스가 실행되는 동안 사용자가 브라우저를 닫으면 프로세스 성공 또는 실패 결과가 사용자에게 표시되는 방식은 어떻게됩니까? 이 문제를 해결하기 위해 단방향 WCF 서비스 호출을 선택합니다. 그러나이 문제는 프로세스 테이블을 만들어 결과를 저장할 필요가 있다는 것입니다 (단계 중 하나에서 실패하고 어떤 단계가 성공적으로 완료되면 오류 메시지가 표시됩니다). 사용자가 웹 페이지에서 호출 할 수있는 다양한 단계가있는 이러한 프로세스가 많고 사용자가 진행 상황을 인식해야하기 때문에 추가 오버 헤드가있는 테이블 (가장 간단한 경우 상태는 "프로세스 xyz 실행 중"일 수 있습니다) 일단 완료되면 출력을 사용자에게 표시해야합니다 (예 : 저장 프로 시저 실행).

이 솔루션을 설계하는 가장 좋은 방법은 무엇입니까?

답변

2

제가보기에는 세 가지 옵션

  1. 가 장기 실행 페이지가 어디에 사용자 대기 응답을 위해. 몇 시간이 걸린다면 많은 유용성 문제가 발생할 것이므로 고려하지 않을 것입니다.
  2. 작업 결과를 저장하는 프로세스 테이블을 생성하십시오. 서비스 기능을 비동기 적으로 실행하고 결과를 서비스에 로깅하도록 위임합니다. 사용자가이 테이블의 최신 결과를 가져 오는 페이지가있을 수 있습니다.
  3. 정말 테이블을 만들고 싶지 않으면 모든 현재 프로세스 세부 정보를 사용자의 세션 상태에 저장하고 위와 같이 현재 프로세스 페이지가 있어야합니다. 세션이 시간 초과 될 수있는 문제가 있거나 웹 앱이 다시 시작될 수 있으며이 모든 것을 잃게됩니다.

숫자 2는 그렇게 큰 어려움을 볼 수 없습니다.모든 유형의 프로세스를 포괄하도록 테이블을 상당히 일반적으로 만들 수 있습니다. 프로세스 세부 정보는 바이너리 또는 XML로 인코딩되고 웹 응용 프로그램에서 해석 할 수 있습니다. 그런 다음 가장 강력한 솔루션을 보유하고 있습니다.

+0

모든 답장을 보내 주셔서 감사합니다. 필자가 구축해야하는 것은 웹 인터페이스에서 트리거되는 작은 작업 실행 관리 도구와 비슷하게 보이지만 매우 일반적인 것은 아닙니다. 아마도 일반적인 프로세스 테이블을 만들고 로그 메시지를 XML로 저장할 것입니다. 로그 메시지는 주로 실행 진행 상황을 나타냅니다. – RKP

1

가장 좋은 방법은 무엇인지 말할 수는 없지만 그러한 장기 실행 프로세스에 Windows Workflow Foundation을 사용하는 것은 확실히 한 가지 방법입니다.

당신도, 그것은에서 어떤 단계에 볼 수있는 프로세스의 추적을 할 당신이 사용자 입력을 기다리고 단계가있는 경우를 지속 할 수 등

WF 특히 (상자 밖으로 많은 기능을 제공합니다 저장 매체가 SQL Server 인 경우) 고려해야 할 좋은 옵션 일 수 있습니다.

http://www.codeproject.com/KB/WF/WF4Extensions.aspx 같은 것을 더 잘 이해할 수 있습니다.

1

나는 당신이 올바른 길에 있다고 생각합니다. 프로세스를 비동기 적으로 실행하고 실행 어딘가에 (테이블) 저장하고 거기에 실행중인 프로세스의 상태를 유지해야합니다. 과정이 실행되는 동안

사용자는 보류 표시 라벨 표시되어야하고, 처리가 완료 될 때 는 결과 라벨을 마쳤다. 사용자가 브라우저를 닫은 경우, 그녀는 그녀의 실행중인 프로세스의 결과 그녀가 로그인 할 다음 번에 볼 수 있습니다.

관련 문제