RDPSession ConnectToClient неожиданно завершает работу - PullRequest
1 голос
/ 16 марта 2012

Я успешно создал решение для совместного использования рабочего стола, где RDPViewer подключается к сеансу RDPSession.Это все работает прекрасно.Теперь, однако, я пытаюсь получить противоположную работу: используя метод StartReverseConnectListener RDPViewer и метод ConnectToClient RDPSession (где сторона сеанса соединяется со стороной зрителя для решения проблем NAT / Firewall).Я выполнил шаги, описанные в http://msdn.microsoft.com/en-us/library/windows/desktop/aa373359%28v=vs.85%29.aspx, в основном:

  1. Зритель получает строку подключения, вызывая метод StartReverseConnectListener, передавая NULL для bstrConnectionString, bstrUserName и bstrPasswordпараметры.

  2. Зритель инициирует прослушиватель обратного соединения, вызывая метод StartReverseConnectListener, передавая NULL для параметра 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

Не удалось распаковать сертификат сервера.

IЯ чувствую, что упускаю что-то очевидное, но не могу понять, что.

Есть предложения?

Спасибо!

1 Ответ

2 голосов
/ 13 апреля 2012

В документации 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, также может быть любым.Это можно запросить и использовать на стороне хоста, посмотрев на свойство RemoteName в интерфейсе IRDPSRAPIAttendee.

...