RDPSession ConnectToClient неожиданно завершает работу
Я успешно создал решение для совместного использования рабочего стола, где RDPViewer подключается к сеансу RDPSession. Это все работает прекрасно. Теперь, однако, я пытаюсь получить противоположную работу: используя метод StartReverseConnectListener RDPViewer и метод ConnectToClient RDPSession (где сторона сеанса соединяется со стороной зрителя для решения проблем NAT/Firewall). Я выполнил шаги, изложенные на http://msdn.microsoft.com/en-us/library/windows/desktop/aa373359%28v=vs.85%29.aspx, в основном:
Зритель получает свою строку подключения, вызывая метод StartReverseConnectListener, передавая NULL для параметров bstrConnectionString, bstrUserName и bstrPassword.
Зритель инициирует прослушиватель обратного соединения, вызывая метод StartReverseConnectListener, передавая NULL для параметра pbstrReverseConnectString и допустимые значения для параметров bstrConnectionString, bstrUserName и bstrPassword.
Зритель отправляет строку подключения, полученную на шаге 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, означает:
СерверСертификат UnpackErr 1798
Не удалось распаковать сертификат сервера.
Я чувствую, что упускаю что-то очевидное, но не могу понять, что.
Какие-либо предложения?
Спасибо!
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, также может быть любым. Это можно опросить и использовать на стороне хоста, посмотрев на RemoteName
недвижимость в IRDPSRAPIAttendee
интерфейс.