2014-09-10 1 views
1

나는 angular.js, WebAPI 및 mongodb에서 실행되는 응용 프로그램을 가지고 있습니다. 내 목표는 신호기로 클라이언트 측 폴링을 대체하는 것입니다. mongodb는 변경 사항에 대한 이벤트를 발생시키지 않으므로 서버 측에서 폴링해야하며, 변경 사항을 감지하면 신호 허브를 사용하여 브로드 캐스트합니다.ASP.Net에서 서버 측 DB 폴링을 수행하는 방법?

IIS에서 되풀이 작업을 중단하지 않고이를 수행 할 수있는 확실한 방법이 있습니까?

  1. Hangfire :

    는이 내가 시도 권장 솔루션처럼 보인다하지만 현재는 SQL Server 및 레디 스 (하지 옵션)를 지원합니다.

  2. HostingEnvironment.QueueBackgroundWorkItem : 작동 할 수도 있지만 광범위하게 사용되지 않을까 우려됩니다. 몇 가지 함정을 놓칠 수도 있습니다.
  3. 의 종류 "덮인 컬렉션 tailable 커서"를 사용 몽고에서 이벤트를 얻을 수있는 방법있다 -하지 옵션을
+0

이런 종류의 질문에 대한 저의 표준 응답은 DB에서 상태를 바꿀 때 이벤트를 알릴 수 없습니까? – Anders

+0

@Anders - 아니요. 다른 웹 구성 요소가 DB를 변경하고 있습니다. 해당 구성 요소와 API 사이에는 직접 연결이있을 수 없습니다. – seldary

+0

서비스 버스를 사용할 수 없습니까? 그런 식으로 "구성 요소"는 메시지 만 게시하고 웹 서버는 메시지를 구독합니다. – Anders

답변

0

QueueBackgroundWorkItem는 당신의 최선의 선택은 우리가 위에서 언급,하지만 100 %의 방탄 것을 고려합니다. 앱 풀은 여전히 ​​재활용됩니다. DB를 폴링하도록 웹 응용 프로그램에 신호를 보내는 Windows 서비스를 만들 수 있습니다.

어쨌든, (폴링 또는 폴링을 통해) singal을 얻은 후에는 그 시점에서 이벤트 기반 디자인을 사용할 수 있습니다. 이점은 분리 된 도메인과 확장 성입니다. 필자는이 프레임 워크를 만들었습니다.

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

+0

다른 서비스를 만드는 것은 옵션이 아닙니다. .귀하의 도서관은 좋지만 내 질문과 관련이 없습니다. QBWI에 대해 논평할만한 것이 있습니까? 앱 풀은 항상 재활용 될 것입니다. 요점은이를 적절하게 다루는 방법입니다. – seldary

+0

당신은 그렇게 말하지 않았지만 괜찮습니다. 어쨌든, CancellationToken을 사용하면 앱이 재활용되기 전에 안전하게 작업을 완료 할 수 있습니다. – Anders

+0

다음은 ASP.NET에서 백그라운드 작업을 수행하는 다양한 방법을 다루는 좋은 블로그입니다. http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html – Anders

2

항상 대답은 "이 달려있다."

  • HostingEnvironment.QueueBackgroundWorkItem. .NET 4.5.2의 최신 추가 기능. 실행에 대한 보장이 없으므로 post 끝의 제한 사항을 참조하십시오.

  • WebBackgrounder Scott Hanselman의 말 : blog : "그 코드는 몇 년 동안 다루지 않았지만, WebBackgrounder NuGet 패키지는 거의 50 만회가 다운로드되었습니다."

  • Hangfire. 인기있는 오픈 소스 프로젝트, mongodb 지원을 추가하는 것은 언제나 환영받는 PR입니다. :)

  • MongoDb 대신 RavenDb 사용. 그들의 Changes API 정말 멋지다.

첫 번째 및 두 번째 옵션은 작업 실행을 보장하지 않으며 세 번째 및 네 번째 옵션은 대신 데이터 저장소에 의존합니다.

관련 문제