2010-06-06 2 views
1

나는 항상 실행중인 Windows 서비스가 있으며 15 분마다 조치가 필요합니다. 또한 서비스가 수행중인 작업에 대한 정보를 표시하는 클라이언트 WinForms 앱이 있습니다. 양식 응용 프로그램이 최신 상태로 업데이트되도록 유지하고 싶습니다. 그러나 매 초마다 폴링을 수행하면 성능이 현저한 지 확실하지 않습니다..net 클라이언트 응용 프로그램을 다른 응용 프로그램의 상태로 업데이트하는 가장 좋은 방법

  • 가 시작 , 내 Windows 서비스가 (내 클라이언트 폼에서) 쿼리
  • 모든 초를받을 수있는 WCF 명명 된 파이프를 엽니의의 WinForm에 타이머는 파이프에 쿼리를 전송 한 다음 결과를 표시 . 파이프가 없으면 서비스가 실행되고 있지 않음을 양식에 표시합니다.

이렇게하는 것이 가장 좋은 방법입니까? 내 서비스가 시작될 때 서비스가 열리면 항상 닫히지 않습니까 (서비스를 중지 할 때까지)? 서비스를 폴링하는 것 이외에도, 서비스가 시작 및 중지하는 것과 같은 특정 이벤트를보고있는 애플리케이션에 알리는 방법이있을 수 있습니다. 그렇게하면 이미 큰 이벤트에 대해 이미 알고있을 것이므로 진행률을 폴링 할 뿐이므로 폴링을 적게 할 수 있습니다.

내가 누락 된 항목이 있습니까?

답변

1

가능한 경우 폴링을 취소합니다. 오버 헤드를 줄이고 필요에 따라 JIT (just-in-time) 상태 업데이트를 제공하는 이벤트 기반 메커니즘을 채택하는 것이 훨씬 낫습니다.

당신은 이미 커브보다 앞서 있습니다. WCF는 확실히 .NET 기반 응용 프로그램에 대해 여기에 갈 수있는 방법입니다. 양식과 서비스가 동일한 시스템에 있으므로 명명 된 파이프 바인딩도 사용할 수 있습니다. 이제는 서비스가 열려있을 때 양식이 수신 할 수있는 정기적 인 상태 업데이트를 포함하여 이벤트를 게시하도록하십시오.

가장 쉬운 방법은 Juval LowyPublish-Subscribe Framework을 사용하는 것입니다. 이 프레임 워크의 깔끔한 점은 게시자와 구독자를 분리한다는 것입니다. 게시자는 구독자가 있는지 여부를 고려하지 않고 이벤트를 게시합니다. 가입자가있는 경우, 이벤트는 소비되도록 전달됩니다. 귀하의 설명에 따라, 나는 이것이 당신을 위해 아주 잘 작동 할 것이라고 생각합니다.

+0

폴링이 지저분하고 부담스러워 보였고 내 WCF 폴링 호출의 일부가 어쨌든 시간 초과되어 클라이언트 응용 프로그램에 문제가 발생하기를 바랍니다. 이 방향으로 나를 가리켜 주셔서 감사합니다 - 나는 그의 예를 확인하고 그것이 나의 필요를 충족시키는 지 볼 것입니다. – SqlRyan

관련 문제