0

클라이언트는 수백 개의 레코드가있는 외부 소스에서 데이터베이스 업데이트를 시작하는 버튼이있는 asp.net 페이지를 원합니다. 이 프로세스는 오랜 시간이 걸립니다. 그는 또한 "1000 개의 레코드 중 10 개를 처리하는 것"과 같이 프로세스가 실행될 때 상태 업데이트를 원합니다. 여러 기사를 읽으면서 Windows 서비스에 데이터베이스 업데이트 코드를 넣을 생각입니다. 전에는 Windows 서비스로 일한 적이 없으며 Windows 서비스를 시작하고 asp.net 페이지에서 폴링하는 방법에 대한 자습서를 많이 찾을 수 없습니다. 내 질문은 이것이이 과정을 처리하는 가장 좋은 방법일까요? 그리고,이 일을 어떻게 성취했는지에 대한 예를 든 사람이 있습니까?발사 및 asp.net 페이지에서 Windows 서비스를 폴링하는 방법

+0

Windows 서비스 대신 웹 서비스를 사용할 수 있습니다. 나는 그것을 해왔고 여기에 대해 블로그를 보냈다 : http : //weblogs.asp.net/stevewellens/archive/2009/04/05/using-session-state-in-a-web-service.aspx –

답변

4

몇 가지 방법이 있습니다.

웹 작업자 프로세스 내에서 장기 실행 작업을 수행하는 것이 일반적으로 잘 끝나지 않는다는 것이 옳습니다. 자원을 묶고, 응용 프로그램 풀을 재활용 할 수 있습니다. 모든 복잡한 프로젝트 필자는 대개 데이터베이스, 내 모델이 포함 된 DLL, Windows 서비스 인 "Worker"및 ASP.NET 웹 사이트의 4 가지로 끝납니다.

"작업자"는 항상 실행중인 Windows 서비스이며 Quartz.net을 사용하여 웹 사이트에서 사용하는 것과 동일한 모델을 사용하여 예약 된 작업을 실행합니다. 이 웹 복잡의 사이트 유지하면 돌발 것 정기적 인 작업의 모든 종류의 수 있습니다 : Windows 서비스를 작성하는 등 VacuumExpiredPickTicketsJob, BackupAndFtpDatabaseJob, SendBackorderReminderEmailsJob,

을 C#에서 어려운 일이 아니다 (이 내장 Visual Studio의 템플릿이지만 실제로는 ServiceBase에서 상속하고 당신은 경주에 가야합니다. TopShelf과 같은 라이브러리는 배포하기가 더 쉽습니다.

왼쪽은 웹 사이트에서 업데이트를 트리거하고 결과를 다시 사용자에게 알리는 것입니다. 이것은 당신이 원하는만큼 간단하거나 복잡 할 수 있습니다. 이것이 많은 사용자에게 확장되어야하는 것이라면 MSMQ과 같은 것을 사용하여 업데이트 명령을 Windows 서비스에 대기시키고 Windows 서비스가 해당 대기열에 응답합니다. 그게 아마도 여기에 잔인한 인상을받습니다.

소수의 사용자에게 서비스의 OnCustomCommand(int command) 메소드를 우선 적용하여 트리거가 될 수 있습니다. 그런 다음 웹 사이트는 ServiceController 클래스의 ExecuteCommand()을 사용하여 프로세스를 시작합니다. 귀하의 웹 사이트와 서비스는 "업데이트 할 일"을 의미하는 매개 변수 값에 동의합니다. 142 (기록의 이유로 128에서 255 사이의 숫자 여야 함)을 가정 해 봅니다.

진행 상황을 클라이언트에게 알려주는 경우 웹 페이지에서 타이머 및 AJAX 호출을 사용하여 업데이트 된 진행률 데이터를 폴링하는 것이 가장 쉽습니다. WebSockets (이 글을 쓸 때 가장자리가 새어 나옴)과 long polling과 같은 새로운 것들로 멋지게 꾸밀 수 있지만, 일정한 폴링은 단순히 크기를 조절할 필요가없는 것으로 작동합니다.

희망이 도움이됩니다.

+0

당신은 MSMQ가 잔인하며 정기적 인 폴링은 괜찮지 만 ... 어떻게해야합니까? asp.net 페이지에서 Windows 서비스에 정기적으로 설문 조사? 아약스 및 타이머 컨트롤을 사용하는 방법을 알고 있지만 상태를 되찾기 위해 Windows 서비스에서 무엇을 호출해야합니까? – user204588

+0

DB 방법에 대해 생각해 보았습니다. 각 제품에 DB 900 번을 맞으면 병목이 생기는지 궁금합니다. – user204588

1

Nicholas의 철저한 답 외에도 다른 옵션은 백 엔드 프로세스를 명령 줄 스크립트로 배포하고 Windows의 내장 된 작업 스케줄러를 통해 실행되도록 일정을 계획하는 것입니다.이 작업 스케줄러는 Windows Server 2008 이상에서 상당히 향상되었습니다. 또는 작업 스케줄러 응용 프로그램의 다른 호스트를 사용할 수 있습니다.

MIS 직원이 표준 Windows 서비스와 비교하여 이해하고 구성하고 새 서버로 마이그레이션하기가 더 쉽도록 명령 줄 접근 방식을 찾습니다.