2009-03-19 10 views
1

응용 프로그램 (문서 관리 시스템)에서는 두 응용 프로그램을 동일하게 유지하기 위해 화면 변경 사항을 알리거나 (화면 변경 내용을 다른 프로그램에 알리는 것으로 가정) 응용 프로그램 데이터 중 하나는 주문 이행 응용 프로그램이고, 다른 하나는 원본 팩스의 문서 뷰어입니다. 성취 앱은 vb6로 작성되고 문서 관리자는 .net 3.5 (C#)에 있습니다. 터미널 서버에서 실행되기 때문에 세션 인식이 가능해야합니다. 문서 뷰어 또는 이행 응용 프로그램이 먼저 열려 있고 둘 다 다른 응용 프로그램없이 사용할 수 있습니다. IPC의 가장 좋은 방법은 무엇입니까?VB6 및 .net 응용 프로그램에 가장 적합한 IPC

답변

2

Vista 또는 Windows 7에서 실행할 수있게하려면 IPC의 가장 좋은 형태는 TCP입니다 (이는 Winsock 컨트롤을 사용하여 VB6에서 매우 쉽게 수행됩니다).

이 장점은 두 사용자가 동일한 사용자로 실행 중이 아니더라도 통신 할 수 있다는 것입니다 (Vista +에서는 SendMessage 또는 Named Pipes로 연결할 수 없습니다). 기억해야 할 유일한 것은 방화벽에 규칙이 설정되어 차단되지 않도록하는 것입니다.

netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable 
+0

문제는 그것도 이점입니다. 단일 사용자에 대해 가능한 여러 세션과 같이 터미널 서버에서 각 응용 프로그램의 여러 인스턴스를 사용하고 있습니다. 따라서 세션을 인식하지 못하는 무언가를 사용할 수 없습니다. –

0

크리스의 대답은 여전히 ​​아마 가장 좋은 방법이지만, 당신은 가능성이 터미널 서버와 정신을 유지하기 kludge을 필요 : 이것은 당신의 설치 프로그램에서 수행 할 수 있습니다.

"서버"응용 프로그램으로 사용하려는 응용 프로그램에서 사용되지 않는 포트를 열고 "클라이언트"응용 프로그램에 입력되도록 표시 할 수 있습니다. 아마도 심지어 환경 변수를 사용합니다. 귀하의 필요에 따라이 접근법은 모두 잘못 될 수 있습니다.

다른 변경 사항이있을 때 알림을 받고 (실제로 변경된 사실을 알리지 않은) 두 개의 앱이 있다면 간단히 Windows 메시지를 보내고 연결하여 앱을 변경할 수 있습니다.

1

명명 된 파이프와 메일 슬롯은 여전히 ​​사용할 수있는 최상의 선택 중 하나이며 크로스 유저와 크로스 프로세스로 작동합니다. 물론 Vista +에서는 여러 무결성 수준에서 실행되는 프로세스에 문제가 있으며 파일 보안과 마찬가지로 이전 OS에도 보안이 적용됩니다.

TCP는 동일한 시스템 내에서 항상 상당히 느립니다. 프로세스간에 WM_COPYDATA보다 악화 될 가능성이 있습니다.

파이프 나 메일 슬롯을 사용하면 세션 ID를 이름의 일부로 만들어 터미널 서비스를 처리 할 수 ​​있습니다. TCP는 포트 번호의 제한된 "네임 스페이스"(항상 0에서 65535 사이의 파일 만 가질 수있는 하드 드라이브를 상상해보십시오. 각 연결에는 두 개의 포트 번호가 필요합니다)로 인해 항상 어려움을 겪습니다.

관련 문제