문제

.NET 어셈블리를 플러그인으로 사용하는 두 개의 관련 없는 프로세스가 있습니다.그러나 두 프로세스 모두 언제든지 시작/중지될 수 있습니다.특정 프로세스가 서버라고 믿을 수는 없습니다.실제로 프로세스 중 하나에 대해 여러 복사본이 실행되고 있지만 다른 프로세스 중 하나만 실행될 수 있습니다.

처음에는 다음을 기반으로 솔루션을 구현했습니다. 이 기사.그러나 이를 위해서는 서버를 구현하는 것이 클라이언트보다 먼저 실행되어야 합니다.

클라이언트가 먼저 실행 중일 때 서버에 일종의 알림을 구현하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

공유 메모리 버퍼의 크기를 관리해야 하거나 충분히 사전 할당해야 하기 때문에 공유 메모리를 사용하는 것이 더 어렵습니다.또한 여기에 넣은 데이터 구조를 수동으로 관리해야 합니다.일단 테스트하고 작동하면 단순성으로 인해 사용하고 테스트하기가 더 쉬울 것입니다.

원격 경로로 이동하는 경우 명명된 파이프를 사용하는 단일 시스템 통신에 TCP 또는 HTTP 채널 대신 IpcChannel을 사용할 수 있습니다. http://msdn.microsoft.com/en-us/library/4b3scst2.aspx.이 솔루션의 문제점은 프로세스가 엔드포인트를 등록할 수 있는 레지스트리 유형 솔루션(공유 메모리 또는 기타 영구 저장소)을 마련해야 한다는 것입니다.이렇게 하면 해당 엔드포인트를 찾을 때 시스템에서 실행 중인 모든 엔드포인트를 쿼리하는 방법을 찾을 수 있고 원하는 것을 찾을 수 있습니다.Remoting을 사용하면 직렬화 및 메서드 호출이 모두 매우 간단하다는 이점이 있습니다.또한 네트워크의 여러 시스템으로 이동하기로 결정한 경우 스위치를 전환하여 대신 네트워킹 채널을 사용할 수 있습니다.단점은 "원격" 통화와 "로컬" 통화를 명확하게 구분하지 않으면 Remoting이 좌절감을 줄 수 있다는 것입니다.

나는 WCF에 대해 잘 모르지만, 그것도 조사해 볼 가치가 있을 것입니다.Spider Sense는 아마도 이 문제에 대한 더 우아한 해결책을 가지고 있다고 말합니다...아마도.

또는 다른 모든 프로세스와 별도로 시작되는 "서버" 프로세스를 생성하여(둘 이상의 프로세스가 시작되지 않도록 시스템 Mutex를 사용하여) 모든 프로세스에 대한 중개 및 등록 허브 역할을 할 수 있습니다. 다른 프로세스.

이벤트(Pub/Sub)에 대한 게시-구독 모델을 살펴봐야 할 사항이 한 가지 더 있습니다.이 기술은 이벤트 소스를 사용할 수 있기 전에 시작되는 리스너가 있지만 이벤트 등록을 기다리기를 원하지 않을 때 도움이 됩니다."서버" 프로세스는 이벤트 레지스트리를 처리하여 게시자와 구독자를 연결합니다.

다른 팁

서버와 클라이언트를 양쪽에서 호스팅하고 먼저 나오는 사람이 서버가 되는 것은 어떨까요?그리고 서버가 중단되면 여전히 활성 상태인 클라이언트가 역할을 전환합니다.

IPC(.net이든 아니든)를 처리하는 방법은 여러 가지가 있으며 TCP/HTTP 터널을 통하는 것도 한 가지 방법이지만 상황과 환경에 따라 매우 나쁜 선택이 될 수 있습니다.

공유 메모리와 명명된 파이프는 더 나은 솔루션이 될 수 있는 두 가지 방법입니다(물론 .Net에서도 수행할 수 있습니다)..Net Framework에도 IPC 클래스가 있지만... AppDomain 문제 때문에 개인적으로 마음에 들지 않습니다...

가로님의 의견에 동의합니다.

게시/구독 서비스를 사용하는 것이 훌륭한 솔루션이 될 것입니다.이는 분명히 이 서비스가 다른 두 서비스 중 하나보다 먼저 실행되어야 함을 의미합니다.

게시/구독을 건너뛰려면 엔드포인트가 서로 다른 두 애플리케이션 모두에서 서비스를 구현하면 됩니다.응용 프로그램 중 하나가 시작되면 IPC 프록시를 통해 알려진 다른 개체에 액세스하려고 시도합니다.프록시가 실패하면 다른 개체가 작동하지 않습니다.

-스콧

나는 전이중 IPC를 수행하는 안정적이고 간단하며 빠른 방법을 찾는 동안 IPC에 사용할 수 있는 모든 옵션을 헤매는 데 이틀을 보냈습니다. IPC라이브러리, Codeplex.com에서 찾은 는 제가 시도한 모든 옵션 중에서 지금까지 완벽하게 작동하고 있습니다.단 7줄의 코드만으로 가능합니다.:D 전이중 IPC를 찾으려고 이 문제를 우연히 발견한 사람이 있다면 시간을 많이 절약하고 이 라이브러리를 사용해 보세요.소스 코드를 가져와서 data.dll을 컴파일하고 제공된 예제를 따르세요.

HTH, CIRC

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top