2009-11-06 2 views
1

다른 많은 외부 응용 프로그램에 대한 컨트롤러 역할을하는 응용 프로그램을 작성하라는 요청을 받았습니다. 예약 된 작업으로 실행되며 목적은 특정 위치에서 찾은 모든 새 파일을 처리하고 처리 할 파일 유형에 따라 외부 처리기를 호출하는 것입니다.C# : 응용 프로그램 간의 통신 연결 해제

컨트롤러 응용 프로그램은 처리기 응용 프로그램이 다음 호출 전에 완료 될 때까지 기다려야하며 성공했는지 여부를 알아야합니다.

파일 중 일부는 소프트웨어 패키지 일 수 있으며 소프트웨어 패키지 목적이 컨트롤러 응용 프로그램 자체를 업데이트 할 수 있다는 점에서 추가 된 복잡성이 있습니다. 이러한 이유 때문에 내가 사용하는 모든 프레임 워크를 고려해야합니다.

기본적으로 저는 설계자가 컨트롤러와 핸들러 간의 강력한 통신을 방해하지 않으려 고 노력하고 있습니다.

답변

2

나는 당신이 매우 별도의 문제가 생각 :

  1. 컨트롤러/핸들러 통신 컨트롤러의
  2. 에서 적절한 소프트웨어 업데이트

그것은 것을 이 핸들러의 모양을 자세히 설명 할 수 있다면 도움이 될 것입니다. .NET 어셈블리는 핸들러 인터페이스를 구현하는 클래스를 가지고 있습니까? 그것과 비슷하다면 MEF를 사용하여 핸들러를 찾아서로드하고 실행하는 것이 좋습니다. MEF는 이러한 핸들러의 위치 및로드를 쉽게 할 수 있습니다.

자동 업데이트 응용 프로그램은 항상 다소 까다 롭습니다. 이 문제를 해결 한 한 가지 방법은 두 부분으로 된 응용 프로그램을 만드는 것입니다. 첫 번째 부분은 컨트롤러를 시작하는 방법을 알고있는 작은 부트 스트 래퍼 응용 프로그램입니다. 기본적으로 부트 스트 래퍼는 컨트롤러 응용 프로그램을 찾고 실행합니다. 필자가해온 방법은 배포 한 응용 프로그램의 새 버전마다 하나의 하위 디렉토리가있는 디렉토리를 만드는 것입니다. 부트 스트 래퍼는 가장 높은 버전을 선택하고 해당 디렉토리에서 찾은 컨트롤러 응용 프로그램을 시작합니다.

샘플 컨트롤러 디렉토리 구조 :

업데이트가 적용
\Programs 
    \Controller 
     bootstrapper.exe 
     \v1.0 
      controller.exe 
     \v1.1 <-- Current version 
      controller.exe 

, 발생하는 모든 새로운 "버전"디렉토리는 컨트롤러 디렉토리에 생성하고 업데이트하는 지정 컨트롤러에 코드를 반환 다시 시작해야합니다. 컨트롤러가 작업을 완료하면 종료됩니다. 부트 스트 래퍼 (그리고 부트 스트 래퍼가 컨트롤러를 시작할 때 블록킹)로 전체 프로세스가 시작 되었기 때문에 부트 스트 래퍼는 컨트롤러가 시작될 때 제어를 다시 얻습니다.부트 스트 래퍼는 단순히 시작 프로세스를 다시 실행하고 새 컨트롤러 버전을 찾고 실행합니다.

여기 하나의 주목 포인트는 부트 스트 래퍼를 업데이트하는 것이 쉽지 않다는 것입니다. 일반적으로 매우 적은 코드가 포함되어 있기 때문에 자주 업데이트하는 것이 아닙니다.

희망이나 도움이되는 아이디어.

+0

핸들러는 아직 존재하지 않지만 이들이 독립 실행 형 응용 프로그램 일 가능성이 높습니다. 우리는 모든 핸들러 작성에 대한 책임이 없으므로 단순성을 위해 결정되었습니다. 부트 스트랩 제안은 재미있는 부분입니다. 특히 버전 폴더를 사용하는 것이 좋습니다. – Andrew

0

NServiceBus을 컨트롤러와 핸들러 간의 메시징 시스템으로 사용해 볼 수 있습니다. 꽤 간단한 시나리오처럼 들리지만 컨트롤러는 특정 핸들러에 메시지를 보낸 다음 응답을 기다립니다. 응답을 기반으로 다른 메시지를 다른 처리기로 보냅니다.

원격 업데이트를 어떻게 할 수 있는지 잘 모릅니다.

0

생각해 볼 수 있습니다. Windows 서비스로 호스팅되는 WCF 서비스 내의 워크 플로입니다. 요구 사항에 따라 순차 워크 또는 상태 워크 플로우를 원한다고 결정할 수 있습니다. 나는 this 당신이 이해하는 데 도움이 될 수 있도록 더 잘

관련 문제