2012-04-10 2 views
2

C#의 .NET 3.5 웹 사이트에서 사용자가 웹 페이지에서 제출을 클릭하면 보고서에 전자 메일 주소로 가입됩니다. 불행히도이 작업은 약 5 분이 걸리고 사용자는 앉아서 확인을 기다려야합니다. 내가 뭘하고 싶은지 그들이 그것을 클릭하면 그들이 구독을 통해 통보 될 것이라고 이메일을 통해 통보됩니다 팝업을 얻을 수 있도록, 그 사이에 내가 다른 곳에서 서버에 가입 작업을 대기열에 그렇게 그것을 변경하는 것입니다 그것은 웹 코드에 존재하지 않습니다. 이것을 할 수있는 방법을 제게 줄 수 있습니까? 기본적인 아이디어는 두 개의 다른 실행 행으로 나뉘어서 우리 웹 사이트를 계속 탐색 할 수있게하고 다른 하나가 그들을 구독 할 수있게하려는 것입니다. 나는 새로운 스레드로 분할을 생각하고 있었지만 웹 코드는 여전히 그 스레드가 다른 것을하기 전에 완료 될 때까지 기다려야한다고 생각한다. 나는 아이디어를 찾고 있는데, 가급적이면 같은 서버에서 실행할 수있는 것입니다. 감사!가입시 사용자가 확인을 위해 웹 페이지에서 대기하는 데 너무 오래 걸립니다 ... 솔루션?

답변

0

오랜 시간이 걸리고 실제로 작업하기를 원한다면 최선의 방법은 대기열에 넣는 것입니다.

기본적으로 요청을 제출하면이를 데이터베이스 테이블에 저장하고 계속 이동하도록하십시오. 그 동안 요청을 처리하기 위해 해당 테이블을 모니터링하는 다른 프로세스를 보유하십시오. 그들이 들어 오면이 두 번째 프로세스가 완료 될 때까지 5 분이 걸리는 부분으로 요청을 보냅니다.

일단 끝나면 "그러한 이메일 목록에 환영"메시지를 보내십시오. 그것은 그것이 효과가 있다는 것을 확인하는 역할을 할 것입니다.

+1

당신은 '과정'당신이 바로, 다른 프로그램이 서버에서 실행중인 쓰기 의미하는 말? 프로세스에 특별한 것이 없습니까? – james

+0

@milly : 그게 정확히 무슨 뜻이야. 또 다른 프로그램 : 일반적으로 Windows 서비스. – NotMe

2

많은 옵션이 있지만 기본적인 접근 방법은 사이트를 제공 업체와 분리하는 것입니다. 대신 "사용자 X가 구독 대기 중입니다"라는 레코드를 작성하면 별도의 프로세스에서 해당 레코드를 읽고 실제 구독을 수행하면서 레코드를 "진행 중"으로 표시합니다. 프로세스가 완료되면 레코드가 완료된 정보로 다시 업데이트됩니다.

데이터베이스, 메시지 큐 또는 다른 방법으로이 작업을 수행 할 수 있습니다. 그러나 근본적으로 귀하의 사이트는 기록을 작성하고 상태를 확인하는 책임 만 있습니다. 공급자와의 실제 상호 작용은 별도로 처리됩니다.

0

제프 앳 우드 (Jeff Atwood)는 관련 주제를 잠시 후 블로그에 올렸습니다. C#을 사용하고 있기 때문에 ASP.NET을 사용하고 있으며 캐시 메커니즘을 활용하여 정기적 인 작업자 작업을 시작할 수 있다고 가정합니다. 사용자의 요청에 따라 구독 세부 정보를 일부 데이터 저장소에 보관할 수 있습니다. 이 작업에서 대기열을 검사하여 어떤 구독을 만들어야하는지 결정한 다음 실행할 수 있습니다.

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

관련 문제