RDPSession ConnectToClient se terminant de manière inattendue

J’ai réussi à créer une solution de partage de bureau où un RDPViewer se connecte à une RDPSession. Tout cela fonctionne à merveille. Maintenant, cependant, j’essaie de faire fonctionner le contraire: utiliser la méthode StartReverseConnectListener de RDPViewer et la méthode ConnectToClient de RDPSession (où le côté session se connecterait au côté spectateur pour résoudre les problèmes de NAT / pare-feu). J’ai suivi les étapes décrites à l’ adresse http://msdn.microsoft.com/en-us/library/windows/desktop/aa373359%28v=vs.85%29.aspx , principalement:

  1. Le visualiseur obtient sa chaîne de connexion en appelant la méthode StartReverseConnectListener, en transmettant NULL pour les parameters bstrConnectionSsortingng, bstrUserName et bstrPassword.

  2. Le visualiseur initie un écouteur de connexion inverse en appelant la méthode StartReverseConnectListener, en transmettant NULL pour le paramètre pbstrReverseConnectSsortingng et des valeurs valides pour les parameters bstrConnectionSsortingng, bstrUserName et bstrPassword.

  3. Le visualiseur envoie la chaîne de connexion obtenue à l’étape 1 au partageur.

En utilisant C # 2010, j’ai effectué les opérations suivantes du côté de RDPSession:

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

Ensuite, du côté de RDPViewer, j’ai terminé:

 ssortingng reverseConnectSsortingng = axRDPViewer1.StartReverseConnectListener(null, null, null); 

(étape 1 ci-dessus)

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

(étape 2 ci-dessus)

Ensuite, de retour du côté de RDPSession, j’essaie d’établir la connexion à l’aide du reverseConnectSsortingng que j’ai obtenu de la visionneuse (j’ai en fait enregistré la chaîne dans un fichier, puis je l’ai chargée du côté de RDPSession):

 session.ConnectToClient(reverseConnectSsortingng); 

(étape 3 ci-dessus)

Dès que j’exécute cette méthode, le côté RDPViewer se déconnecte avec une erreur de 1798, ce qui, selon http://msdn.microsoft.com/en-us/library/aa373802%28VS.85%29.aspx , signifie:

ServerCertificateUnpackErr 1798

Impossible de décompresser le certificate du serveur.

J’ai l’impression qu’il me manque quelque chose d’évident, mais je ne peux pas trouver quoi.

Aucune suggestion?

Merci!

La documentation de Microsoft est totalement fausse en ce qui concerne les connexions inversées. Voici ce que vous devez faire (adapté de votre code ci-dessus):

RDP Session Side:

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

Côté RDPViewer ( notez que hostConnSsortingng doit avoir la même valeur que celle extraite du côté de la session ):

 ssortingng viewerConnSsortingng = axRDPViewer1.StartReverseConnectListener(hostConnSsortingng, "My Name", "12345"); 

Revenons maintenant au côté de la session RDP ( notez que viewerConnSsortingng doit avoir la même valeur que celle extraite du côté du visualiseur ):

 session.ConnectToClient(viewerConnSsortingng); 

Et cela devrait le faire. Quelques choses à noter. Le nom de groupe spécifié dans CreateInvitation n’a pas besoin de faire correspondre quoi que ce soit ailleurs. Je pense que c’est juste pour référence si votre programme doit énumérer les invitations lancées par l’hôte. Le nom d’utilisateur transmis à StartReverseConnectListener peut également correspondre à vos souhaits. Cela peut être interrogé et utilisé côté hôte en consultant la propriété RemoteName dans l’interface IRDPSRAPIAttendee .