2012-03-16 4 views
1

RDPViewer가 RDPSession에 연결되는 데스크톱 공유 솔루션을 성공적으로 만들었습니다. 그 모든 것이 아름답게 작동합니다. 그러나 이제 RDPViewer의 StartReverseConnectListener 메서드와 RDPSession의 ConnectToClient 메서드 (세션 측면에서 NAT/방화벽 문제를 해결하기 위해 뷰어 측에 연결)를 사용하여 반대의 작업을 시도하고 있습니다. 나는 주로 http://msdn.microsoft.com/en-us/library/windows/desktop/aa373359%28v=vs.85%29.aspx에 설명 된 단계를 따라했습니다RDPSession ConnectToClient 예기치 않게 종료 됨

  1. 뷰어는 bstrConnectionString, bstrUserName 및 bstrPassword 매개 변수에 대해 NULL을 전달하는 StartReverseConnectListener 메소드를 호출하여 연결 문자열을 가져옵니다.

  2. 시청자는 bstrConnectionString, bstrUserName 및 bstrPassword 파라미터에 대한 pbstrReverseConnectString 파라미터 유효한 값 NULL를 전달 StartReverseConnectListener 메소드를 호출하여 역방향 연결 수신기를 개시한다.

  3. 뷰어는 1 단계에서 얻은 연결 문자열을 공유기로 보냅니다. RDPViewer 측에, 내가 해봤

    RDPSession session = new RDPSession(); 
    session.Open(); 
    session.Invitations.CreateInvitation(null, "test", "12345", 1); 
    

    다음 : C 번호 2010을 사용

, 나는하여 RDPSession 측에서 다음을 수행 한

string reverseConnectString = axRDPViewer1.StartReverseConnectListener(null, null, null); 

(단계 1, 위)

axRDPViewer1.StartReverseConnectListener(reverseConnectString, "test", "12345"); 

(상기 2 단계)

그런 다음, 다시 RDPSession 측, 내가 뷰어에서 얻은 reverseConnectString를 사용하여 연결을 시도 (I 실제로 RDPSession 측에로드 한 후 파일에 문자열을 저장하고) :

session.ConnectToClient(reverseConnectString); 

(상기 단계 3)

마자이 방법 http://msdn.microsoft.com/en-us/library/aa373802%28VS.85%29.aspx에있어서, 수단 1798의 에러와 RDPViewer 측 끊어 실행 같이

ServerCer을 tificateUnpackErr 1798

서버 인증서의 압축을 해제하지 못했습니다.

나는 분명히 뭔가를 놓치고있는 것처럼 느껴진다. 그러나 나는 무엇을 알아낼 수 없다.

제안 사항?

감사합니다.

답변

2

역방향 연결에 관한 Microsoft 설명서는 모두 잘못되었습니다.

RDP 세션 사이드 : 여기 당신이해야 할 (위의 코드에서 적응) 무엇

RDPSession session = new RDPSession(); 
session.Open(); 
string hostConnString = session.Invitations.CreateInvitation(null, "My Group Name", "12345", 1); 

RDPViewer 측 (참고 hostConnString 세션 측에 검색과 동일한 값이어야한다는) : 이제 다시 RDP 세션 측합니다 (viewerConnString 시청자 측에서 검색된 값과 동일해야한다는 주)에

string viewerConnString = axRDPViewer1.StartReverseConnectListener(hostConnString, "My Name", "12345"); 

:

session.ConnectToClient(viewerConnString); 

그리고 그렇게해야합니다. 주의해야 할 몇 가지. CreateInvitation에 지정된 그룹 이름은 다른 곳에서는 일치 할 필요가 없습니다. 나는 여러분의 프로그램이 호스트에 의해 시작된 초대장을 열거 할 필요가있을 때 참조 용이라고 생각한다. StartReverseConnectListener에 전달 된 사용자 이름은 원하는 어떤 것도 될 수 있습니다. 호스트 측에서는 IRDPSRAPIAttendee 인터페이스의 RemoteName 속성을 조사하여이를 조사하고 사용할 수 있습니다.

+0

감사합니다. Jon! 문서에 대해 당신이 옳습니다. 일단 클라이언트/뷰어 초대를 사용하여 ConnectToClient를 호출하면 _ 서버/호스트의 연결 문자열 _을 사용하여 StartReverseConnectListener를 호출 한 결과 (클라이언트/뷰어의 초대장을 사용하여 연결하지 않고) 작업이 시작됩니다. 그게 내가 놓친 열쇠 였어. 실제로 연결하는 데는 (30 초 정도) 더 오래 걸리는 것처럼 보이지만 연결되어 있으므로 프로젝트를 이동할 수 있습니다. 다시 한 번 감사드립니다! – basiphobe

+0

코드 Jon을 보내 주셔서 감사합니다. - 3 행에 솔루션에 추가하고자하는 것이 하나 있는데, 추가 행이 하나 있습니다. IRDPSRAPIInvitation Invitation = session.Invitations.CreateInvitation (null, "My Group Name" "12345", 1); 문자열 hostConnString = Invitation.ConnectionString; 감사합니다. – XikiryoX

관련 문제