2009-06-03 5 views
0

RPC 대신 WCF를 사용하기 위해 이전 C++ 서비스를 업데이트 중이며 핸들을 보내고받을 때 사용할 유형에 대한 문제가 있습니다 (HANDLE, void * .. 등). 업데이트 된 서비스에서 현재 IntPtr을 사용하고 있지만 64 비트 버전의 서비스에서 32 비트 버전으로 전환 할 때는 작동하지 않습니다. IntPtr은 내부적으로 사용자가 실행하는 환경에 따라 달라지는 무효 *이기 때문에 내부적으로 역 직렬화 할 수 없습니다.RPC 컨텍스트 핸들과 동일한 WCF가 있습니까?

이렇게하면 RPC 인프라가 실제로 핸들 값을 보내지 않으므로 문제가 해결됩니다. 핸들. 이 프로세스는 다음 문서에서 설명 :이 기능에 WCF에 해당 찾고 있어요

See Context handles section

. 비슷한 논리를 서비스에 직접 작성하여 IntPtr을 Int64로 변경할 수도 있지만 RPC 방식과 비슷한 점이 있기를 바랍니다.

답변

1

이와 같은 코드를 다시 디자인하는 것이 좋습니다. 핸들을 전달하는 원래의 이유가 더 이상 유효하지 않을 수 있습니다.

또한 네이티브 클라이언트와 서버간에 핸들을 전달한다고 가정하지만 WCF를 사용하면 관리되는 코드로 작업하게됩니다. 한쪽의 관리 코드는 다른 쪽의 "핸들"을 통해 무엇을 할 것입니까? 예를 들어 상대방에게 파일 경로를 보내고 파일 핸들을 전달하는 대신 다른 쪽에서 파일을 열어 두는 것이 더 합리적 일 수 있습니다.

이 코드는 RPC가 이전 기술이 아닐 때 작성되었을 수 있습니다. 이것은 나머지는 RPC와 동시대의 기술로 설계되었다는 것을 의미합니다. 현대의 세계에서 애플리케이션 전체를 다시 디자인해야 할 필요가있을 가능성이 큽니다. 이 재 설계에서 WCF를 사용하여 현재 RPC를 사용하여 수행중인 작업 중 종류을 수행 할 가능성이 높습니다. 그러나 그것은 일대일 매치가 아닐 것입니다.

관련 문제