2014-09-17 8 views
0

InterProcess 통신에 WCF와 NamedPipes를 사용하고 있습니다.WCF IPC는 NamedPipes를 사용하여 2 개의 프로세스가 동시에 서로 다른 파이프에서 서로 이야기하려고 시도 할 때 깨지기도합니다.

각 프로세스는 다른 프로세스에서 쉽게 검색 할 수있는 고유 한 명명 된 파이프를 수신합니다.

내가 겪고있는 문제는 서로 거의 동시에 이야기하려고하는 2 개의 프로세스와 관련이 있습니다. 다른 파이프에서 가정하지만 누가 WCF로 진행되는지 알고 있습니다 ...

기본적으로 흐름은 입니다. 프로세스 1은 프로세스 2가 프로세스 1 메서드를 호출하는 것과 거의 동시에 파이프 2에서 프로세스 2 메서드를 호출합니다 파이프 1에. 이 일이 발생하면 내 ICommunicationObject.Close() 호출 TimeoutExceptions 계속.

나는 NamedPipes와 NetTcp를 시도했으며 둘다 같은 문제가있다. BasicHttp 다른 한편으로는 않습니다 ... 잘 작동하지만 같은 컴퓨터에서 IPC BasicHttp 사용해야 할합니다.

또 다른 중요한 정보. Dispatcher.BeginInvoke()를 사용하여 내 응답 호출을 대기열에 추가하면 작동합니다. 다음 호출을 대기열에 두는 것처럼 WCF가 다음 호출을 다시 시작하기 전에 첫 호출을 완료 할 시간을줍니다. 하지만 프로세스가 서로 다른 파이프에서 통신 할 때 왜 문제가 발생합니까 ??

모든 입력을 크게 평가합니다.

답변

0

이 고전적인 교착 상태입니다. 양측은 서로의 UIThread에 작업을 게시하고 두 사람 모두 다른 쪽이 회신하기를 기다리고 있습니다. 발신자를 대신 Tasks를 사용하고 배경 스레드에서 원격 호출을 전송하도록 설정했는데 모두 정상입니다.