2010-04-20 2 views
1

현재 계획중인 디자인에 대한 입력을 원합니다.여러 개의 Windows 서비스 관찰

기본적으로 필자는 특정 데이터를 수집하면서 항상 실행해야하는 몇 가지 외부 계측 기능을 가지고 있습니다. 내 생각은 각각을위한 서비스를 생성하고, 항상 장비를 실행하고 폴링하고, 로깅을 수행하는 것이 었습니다. 하나의 장비가있을 수도 있고, 40 일 수도 있습니다.

그러나이 모든 데이터를 사용하려면 하나의 응용 프로그램이 필요합니다. 몇 가지 수학을 실행하고 차트 작성, 표시, 이메일 전송 등을 할 수 있습니다.이 응용 프로그램이 실행되지 않아도 서비스가 끊임없이 데이터를 소비해야한다는 것이 중요합니다. 또한 이러한 서비스는 거의 항상 클라이언트 응용 프로그램과 동일한 컴퓨터에서 실행되어야하지만 .NET Remoting과 같은 네트워크 기능은 흥미로운 기능입니다.

내 질문은 ... 이것이 최고의 디자인입니까? 그렇다면 서비스와 응용 프로그램 간의 통신을 어떻게 진행합니까? WCF를 살펴 보았지만 요청 - 응답 웹 서비스가 아닌, 청취 할 수있는 모든 데이터를 지속적으로 스트리밍하는 것이 아닙니다. 또는 이러한 서비스를 WCF를 사용하는 다른 웹 서비스에 연결해야합니까? 그런 다음 웹 서비스를 자주 폴링하는 씬 클라이언트 뷰어에서 사용할 데이터를 컴파일해야합니까?

모든 링크와 자료는 크게 감사하겠습니다. 나를 연구하기위한 .NET 네임 스페이스도 환영합니다. 뭔가 명확하지 않다면 알려주세요.

답변

3

그냥 생각해보세요.하지만 아마 백엔드 데이터베이스를 추가 한 것으로 간주 했습니까? 모든 서비스가 데이터를 대조하고이를 유지하면 정보를 처리해야하는 애플리케이션이 서비스간에 IPC로드를 설정하는 대신 데이터베이스를 쿼리 할 수 ​​있습니다.

+0

이것에 대해 생각해 봤지만 문제는 이것보다 복잡합니다 ... 각 악기는 1MB/초의 순서로 생성됩니다. 클라이언트 응용 프로그램이 실행 중일 때 실제로 저장할 필요가있는 약 1KB/초까지 합성됩니다. 관리가 더 쉽습니다. 그러나이 클라이언트가 실행되고 있지 않을 때 데이터베이스가 어떻게 상상할 수없는 비율로 증가하는지 쉽게 볼 수 있습니다 (데스크톱 컴퓨터의 경우). 기본적으로, 아무 것도 관찰하지 않으면 데이터가 무시됩니다 (그러나 간략한 형식으로 기록됩니다). – drharris

+0

@drharris를 사용하면 클라이언트 응용 프로그램이 실행 중임을 나타내는 데이터베이스의 필드 (웹 사이트와 유사 함)를 가질 수 있습니다. 클라이언트가 실행되는 동안에 만 데이터를 유지하고 그렇지 않으면 파일에 기록하십시오. – James

+0

내 첫 번째 생각은 응용 프로그램이 충돌 할 때 일어나는 일이었습니다. 하지만 DateTime으로 태그를 지정할 수 있으며 지난 X 분 또는 이와 유사한 경우에만 지속됩니다. 이봐 요, 저는 DBA 업무에도 참여하는 것을 싫어합니다. 그러나 이것이 제가 여기있는 유일한 방법일지도 모른다고 생각합니다. MSMQ는 아키텍처면에서 너무 복잡해지고 웹용 WCF를 좋아하지만 잔인한 것처럼 보입니다. 나는 DB가 갈 길이라고 생각합니다. – drharris

1

WCF는 스트리밍을 처리 할 수 ​​있습니다. 또한 MSMQ를 전송 수단으로 사용할 수 있기 때문에 계측기가 대량의 데이터를 생성하기 시작하더라도 메시지가 손실되지 않습니다.

+0

이것이 가장 견고한 디자인이라고 생각합니다.하지만 불행히도 저는이 문제를 해결하려고합니다. WCF/MSMQ를 배우지 않고도 좋은 리소스/튜토리얼을 배울 수 있습니다. 나는이 일들에 대해 배우기 위해 몇 가지 휴지기를 얻었을 때이 생각을 구할 것이다. – drharris

+0

http://msdn.microsoft.com/en-us/netframework/dd939784.aspx를 참조하십시오. 그리 어렵지 않습니다. 일단 큐가 구성되면 WCF를 사용하도록 구성하면 거의 대기하지 않습니다. –

관련 문제