【问题标题】:RDPSession ConnectToClient Terminating UnexpectedlyRDPSession ConnectToClient 意外终止
【发布时间】:2012-03-16 18:03:58
【问题描述】:

我已成功创建了一个桌面共享解决方案,其中 RDPViewer 连接到 RDPSession。这一切都很好。然而,现在,我试图让相反的工作:使用 RDPViewer 的 StartReverseConnectListener 方法和 RDPSession 的 ConnectToClient 方法(会话端将连接到查看器端以解决 NAT/防火墙问题)。我已经按照http://msdn.microsoft.com/en-us/library/windows/desktop/aa373359%28v=vs.85%29.aspx 列出的步骤进行了操作,主要是:

  1. 查看器通过调用 StartReverseConnectListener 方法,为 bstrConnectionString、bstrUserName 和 bstrPassword 参数。

  2. 查看器通过调用 StartReverseConnectListener 方法,为 pbstrReverseConnectString 参数和有效值 bstrConnectionString、bstrUserName 和 bstrPassword 参数。

  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,这意味着:

ServerCertificateUnpackErr 1798

解压服务器证书失败。

我觉得我遗漏了一些明显的东西,但我不知道是什么。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: c# .net remote-access rdp desktop-sharing


    【解决方案1】:

    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 接口中的RemoteName 属性在主机端进行查询和使用。

    【讨论】:

    • 谢谢你,乔恩!您对文档的看法是正确的。一旦我使用客户端/查看者邀请调用 ConnectToClient,该邀请是由于使用服务器/主机的连接字符串调用 StartReverseConnectListener(而不是尝试仅使用客户端/查看者自己的邀请进行连接)而创建的,它开始工作。那是我丢失的关键。实际连接似乎需要更长的时间(几乎 30 秒),但它正在连接,我可以移动项目。再次感谢!
    • 感谢乔恩的代码 - 我想在第 3 行的解决方案中添加一件事,它应该有另外一行:IRDPSRAPIInvitation Invitation = session.Invitations.CreateInvitation(null, "我的组名", "12345", 1); string hostConnString = Invitation.ConnectionString;谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 2013-12-16
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多