.NET (특히 WPF) 응용 프로그램과 백그라운드에서 실행중인 MFC 응용 프로그램간에 명명 된 파이프를 설정하는 방법은 무엇입니까? XML 인스턴스를 보내는 동기 및 비동기 메시징을 제공해야합니다. 콜백 아키텍처를 사용할 방법이 있습니까?.NET과 MFC간에 명명 된 파이프를 설정하는 방법은 무엇입니까?
답변
MFC 응용 프로그램 : 명명 된 파이프를 도우려는 MFC 클래스가 특별히 있다고는 생각되지 않지만 Windows Named Pipes API가 너무 어렵지 않거나 더 높은 수준의 소스/셰어웨어 클래스를 열어 볼 수 있습니다. 추상화 (for example here)
.NET 응용 프로그램에서 System.IO.Pipes 네임 스페이스의 형식은 사용하기 매우 쉬운 명명 된 파이프를 통해 멋진 스트림 추상화를 제공합니다. 당신이해야 할 것이다
결정은 다음과 같습니다
- 응용 프로그램은 파이프를 생성하고 연결하는 다른 응용 프로그램 (파이프 클라이언트)을 수신에 대한 책임 파이프 서버입니다.
- OS에서 제공하는 메시지 스트리밍 모드로 직접 작업 할 수 있습니다 (파이프에 대한 각 쓰기는 하나의 메시지로 간주됩니다). 아니면 파이프 바이트 스트림을 통해 자체 메시지 프레임을 작성해야합니다.
양방향 작업이 지원되므로 원하는 경우 파이프 메시징을 통해 "콜백 아키텍처"를 빌드 할 수 있습니다.
Windows Communication Framework는 명명 된 파이프 전송 바인딩을 제공합니다. 그러나 이것은 WPF 응용 프로그램 측면에서도 유용하지 않습니다. MFC 측면에서 부분적으로 문서화 된 Microsoft 프로토콜을 원시 파이프 통신 위에 겹쳐서 호스트하는 경우가 아니라면 (이 on my blog에 대한 자세한 내용은 if 너는 관심이있다).
요청/응답 아키텍처를 만들고 싶습니다. 명명 된 파이프가 그런 것을 제공 할 수 있습니까? 서버에서 기다리는 동안 서버/클라이언트가 쓸데없이 회전해야합니까? – Jordan
명명 된 파이프 전송을 통해 요청/응답 아키텍처를 구축 할 수는 있지만 명명 된 파이프 자체는이를 제공하지 않습니다. 이는 양방향 통신 전송입니다. 양측의 API는 비동기 IO 패턴을 지원합니다. –
파이프가 둘 다 동일한 시스템에서 실행되는 경우 파이프 이름이 필요합니까? MMF는 로컬 통신에 적합하며 오래된 소켓은 네트워크에서 더 좋습니다. –
명명 된 파이프는 명명 된 파이프입니다. 특수한 메모리 버퍼입니다. 어떤 앱이 서버이고 어떤 앱이 클라이언트인지 결정해야합니다. 나머지는 MFC, .NET에만 해당되며 문서를 읽는 경우 전혀 어렵지 않습니다. – Nickolodeon