2012-03-16 266 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. 觀衆通過調用 StartReverseConnectListener方法,傳遞NULL爲 bstrConnectionString,bstrUserName和bstrPassword參數獲得其連接字符串。

  2. 觀看者通過調用 StartReverseConnectListener方法,傳遞NULL爲用於 bstrConnectionString,bstrUserName和bstrPassword參數 pbstrReverseConnectString參數有效值的發起反向連接偵聽器。

  3. 查看器將步驟1中獲取的連接字符串發送到 共享器。

使用C#2010年,我已經做了的RDPSession側以下幾點:

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

然後,在RDPViewer身邊,我已經做了:

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

(步1,以上)

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

(上述步驟2)

然後,重新站上RDPSession方面,我嘗試使用我從觀衆中獲得的reverseConnectString進行連接(我實際上保存在字符串到一個文件中,然後裝它的RDPSession側):

session.ConnectToClient(reverseConnectString); 

(步驟3,見上文)

當我執行該方法,RDPViewer側斷開與1798的錯誤,其中,根據http://msdn.microsoft.com/en-us/library/aa373802%28VS.85%29.aspx,是指:

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應在會議側作爲檢索相同的值):

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

現在又回到了RDP會話側(注意,viewerConnString應該是從觀察者側檢索相同的值):

session.ConnectToClient(viewerConnString); 

而且應該這樣做。有幾件事要注意。在CreateInvitation中指定的組名不需要與其他地方的任何內容匹配。我認爲這只是供參考,如果你的程序需要枚舉主機啓動的邀請。傳遞給StartReverseConnectListener的用戶名也可以是任何你想要的。通過查看IRDPSRAPIAttendee接口中的​​屬性,可以在主機端查詢和使用此端口。

+0

謝謝,喬恩!你是對的文檔。一旦我使用由創建的客戶端/查看器邀請來調用ConnectToClient,由於使用服務器/主機的連接字符串_調用StartReverseConnectListener(而不是嘗試僅使用客戶端/查看器自己的邀請進行連接),它開始工作。那是我失蹤的關鍵。實際連接似乎需要更長的時間(差不多30秒),但它正在連接,我可以一起移動項目。再次感謝! – basiphobe 2012-04-16 20:58:50

+0

感謝代碼喬恩 - 有一件事我想添加到您的解決方案的第3行,它應該有一個額外的行: IRDPSRAPIInvitation Invitation = session.Invitations.CreateInvitation(null,「My Group Name」, 「12345」,1); string hostConnString = Invitation.ConnectionString; 謝謝! – XikiryoX 2012-10-12 04:53:18