2009-09-01 6 views
2

두 개의 Windows 서비스가 실행 중이라고 가정 해 보겠습니다. 하나의 서비스는 'Polling (폴링)'입니다.이 서비스는 인쇄 작업을 위해 데이터베이스를 폴링합니다. 새 인쇄 작업이 발견 되 자마자 '인쇄'라는 다른 서비스는 작업을 프린터로 보내야합니다.Windows 서비스가 서로 어떻게 상호 작용할 수 있습니까?

(이유는 하나의 서비스로 해결할 수없는 이유는 별개의 문제입니다.)

내가 가진 간단한 솔루션 아이디어는 '폴링'서비스가 인쇄 작업을 만들고 파일을 어딘가에 저장하고 '인쇄'서비스가 해당 위치를 모니터링하고 파일을 읽고 인쇄 작업을 실행하는 것입니다. .

'폴링'서비스에서 '인쇄'기능을 직접 호출 할 수 있습니까?

개발 도구는 .NET 3.5/C#이 중요합니다.

답변

3

예. WCF를 사용하면 서비스가 서로 통신 할 수 있습니다. NetNamedPipes 바인딩은 로컬에서 동일한 상자 통신에 적합한 선택입니다.

+0

동의합니다. NetNamedPipeBinding은 WCF를 처리 할 때 쉽게 프로세스 간 통신을 수행 할 수있는 방법입니다. – bobbymcr

+0

이해하기에 충분히 단순 해 보이고 이미 작은 작업 샘플을 실행 중이므로 받아들입니다. – Evgeny

4

그것은 표준 IPC 문제이고 고양이 피부 방법만큼의 솔루션이 같습니다 message queue가 될 수있는 것처럼 소리가 특정 예를 들어 소켓, 파이프, 파일, 매핑 된 메모리 등

은 좋은 해결책. 첫 번째 서비스는 대기열에 작업을 기록 할 수 있고 두 번째 서비스는 작업을 편리하게 읽을 수 있습니다. 프린터가 바쁘거나 오프라인 상태가되는 등의 문제에 대처할 수 있습니다.

+0

네, 절대적으로 옳습니다. 그가 설명한 FileSystemWatcher 클래스 (http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)의 사용은 대기열처럼 작동합니다. 또 다른 옵션은 서비스가 동일한 상자에 있기 때문에 IPC를위한 OS 뮤텍스입니다. 안녕하세요 perf 비록 데이터 전송에 큰. 파일 놓기와 결합하면 그냥 일이 될 수 있습니다. 선택할 수있는 옵션은 가지고있는 기술의 문제, bbuild하려는 기술, 미래의 시스템 발전 등입니다. 관습은 문제가되지 않습니다. – Cheeso

관련 문제