2009-03-14 4 views
1

데이터베이스에 파일을 업데이트하거나 추가하는 aspx 웹 응용 프로그램이 있습니다. 클라이언트는 브라우저를 통해 액세스하며 요구 사항 중 하나는 업데이트를 시작하고 업데이트가 진행되는 동안 브라우저를 닫을 수 있다는 것입니다. 브라우저를 닫은 후 조금씩 실행되는 것처럼 보이지만 멈 춥니 다. asp.net을 위해 응용 프로그램을 어떻게 실행시킬 수 있습니까?브라우저 종료 후 내 웹 앱 실행 유지

답변

3

WF (Workflow Foundation)으로 해결할 수있는 좋은 방법입니다. 브라우저를 종료해야하는 작업에 대한 워크 플로를 만듭니다. 워크 플로에는 ASP.NET과 별도의 스레드와 라이브 사이클이 있습니다.

0

웹 응용 프로그램에서 작업을 푸시 할 수있는 별도의 Windows 서비스를 만든 다음 사용자가 다시 로그인 할 때 작업 상태를 확인할 수 있습니다.

Windows 서비스는 asp.net 앱 도메인에 연결되지 않으므로 웹 응용 프로그램에서 무슨 일이 일어나고 있는지에 관계없이 계속 실행됩니다.

1

웹 응용 프로그램은 응용 프로그램 풀에서 계속 실행되지만 결국 재활용됩니다. 사용자 세션이 실행되는 동안 응용 프로그램을 유지해야하므로 세션 시간 초과를 조정하면 문제를 해결할 수 있습니다.

장기 실행 작업을 대신 서비스로 옮기는 것이 더 나은 방법이지만 응용 프로그램을 다시 작성해야 할 수도 있습니다.

1

일반적으로 장기 실행 또는 비동기 처리의 경우 요청을 처리 할 백 엔드 서비스로 보내고 자합니다. 처리를 완료하기 위해 웹 응용 프로그램을 계속 유지하려고하면 특히 HTTP 및 세션 시간 초과로 인해 문제가 발생할 수 있습니다.

일반적인 패턴은 요청을 메시지 큐에 넣고 가능한 경우 백엔드 서비스에서 처리하도록하는 것입니다.

+0

너무 느림 –

0

이 패턴을 실행 했으므로 HTTP 요청에서 작업을 분리해야합니다. 우리가 해결 한 방법은 예정된 이벤트로 수행 할 컴퓨팅을 추상화하는 것입니다. 따라서 브라우저에서 사용자가 백엔드에서 오랫동안 (상대적으로) 계산을 요구하는 작업을 수행한다고 가정하면이 계산에는 'doXYZForUser'와 같은 이름이 주어지며 (userId, params ...)와 같은 매개 변수 벡터가 주어지고 작업 대기열로 보냈다. 나중에 사용자는 다시 로그인하여 작업의 상태를 볼 수 있습니다.

저는 Java 스택과 Java Message Service (JMS)를 실행하고 있지만 원리는 같습니다. 브라우저의 요청은 이벤트를 큐에 넣고 브라우저는 이벤트가 작업 큐에 있음을 알리는 ACK를받습니다. 큐는 완전히 별도로 실행되는 프로세스에 의해 관리됩니다.이 프로세스는 .NET에서 단지 메시지 큐라고합니다. 대기열에서 작업이 처리되고 결과가 작업을 시작한 사용자에 대한 참조가 포함 된 별도의 테이블에 배치 될 수 있으므로 다음에 작업 상태/결과가 로그인 될 때 ​​결과가 반환 될 수 있습니다.

관련 문제