2008-09-04 2 views
0

.NET 어셈블리를 플러그인으로 사용하는 두 개의 관련없는 프로세스가 있습니다. 그러나 어느 한 프로세스는 언제든지 시작/중지 할 수 있습니다. 나는 서버가되는 특정 프로세스에 의존 할 수 없다. 실제로 프로세스 중 하나에서 여러 복사본이 실행될 수 있지만 다른 프로세스 중 하나만 실행될 수 있습니다.서비스 중재자가없는 .NET IPC

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

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

답변

1

이 강하다는 ... 일부 응용 프로그램 도메인 문제로 인해 그들을 좋아하지 않아 공유 메모리 버퍼 (또는 사전 할당). 또한 데이터 구조를 수동으로 관리해야합니다. 일단 테스트하고 작동 시키면 단순성으로 인해 사용 및 테스트가 더 쉬워집니다. 당신이 원격 경로를 이동하는 경우

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

저는 WCF에 대해 많이 알지 못합니다. 그러나 이것 또한 살펴볼 가치가 있습니다. 거미 감각은 아마도이 문제에 대한 좀 더 우아한 해결책을 가지고 있다고 말합니다. 아마도.

또는 다른 모든 프로세스와 별도로 시작되고 (둘 중 하나가 시작되지 않도록 시스템 뮤텍스를 사용하여 실행되는) "서버"프로세스를 만들어 중간 및 중간 프로세스로 작동 할 수 있습니다. 다른 모든 프로세스의 등록 허브.

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

0

서버와 클라이언트를 양면에 호스팅하지 않는 이유는 무엇입니까? 먼저 서버가 될 사람이 있습니까? 서버가 끊어지면 여전히 활성 상태 인 클라이언트가 역할을 전환합니다.

0

는 IPC를 처리하는 방법에는 여러 가지가 있습니다 (.NET 여부) 및 TCP/HTTP 터널을 통해 하나의 방법입니다 ...하지만 아주 나쁜 선택 (환경과 enviornment에 따라)이 될 수 있습니다.

공유 메모리 및 명명 된 파이프는 당신을 위해 더 나은 솔루션이 될 수있는 두 가지 방법 (그리고 예 그들은 닷넷에서 할 수 있습니다)입니다. 이 닷넷 프레임 워크의 IPC 클래스는 것입니다 ...하지만 당신은의 크기를 관리해야하기 때문에 나는 개인적으로 공유 메모리를 사용

0

나는 Garo에 동의합니다.

펍/서브 서비스를 사용하는 것이 좋습니다. 이것은 분명히이 서비스가 다른 둘 중 하나보다 먼저 실행되고 실행되어야 할 필요가 있음을 의미합니다.

pub/sub를 건너 뛰려면 다른 종단점을 가진 두 응용 프로그램에서 서비스를 구현하기 만하면됩니다. 두 응용 프로그램 중 하나가 시작되면 IPC 프록시를 통해 다른 알려진 개체에 액세스하려고 시도합니다. 프록시가 실패하면 다른 오브젝트가 작동하지 않습니다.

-Scott

0

나는 전이중 (full-duplex) IPC를 할 수있는, 신뢰할 수있는 간단하고 빠른 방법을 찾고있는 동안 IPC에 사용할 수있는 모든 옵션을 구불 구불 이일 보냈다. Codeplex.com에서 찾은 IPCLibrary은 지금까지 시도한 모든 옵션에서 완벽하게 작동합니다. 모두 7 줄의 코드 만 있습니다. : D 누군가 전이중 IPC를 찾으려는 시도에서 우연히 발견되면, 시간을 많이 절약하고이 라이브러리를 사용해보십시오. 소스 코드를 가져 와서 data.dll을 컴파일하고 주어진 예제를 따르십시오.

HTH, circ