2009-08-13 9 views
0

J'écris une application pour tester la connectivité RDP à une banque de serveurs VM Windows 2003. Le mode de défaillance typique est que du code exécuté sur le serveur se boucle en boucle, évitant ainsi les connexions RDP - et la plupart des autres types de connexion. Lorsque cela se produit, vous pouvez toujours exécuter une commande ping sur le serveur et cela semble aller, mais vous ne pouvez rien faire d'autre. J'utilise C#, .NET 3.5 et RDP version 6.1 - J'ai essayé de lancer le client ActiveX RDP (MSTSC ..) mais cela nécessite une intervention humaine et ne fonctionne pas très bien. J'ai trouvé un autre article ici qui a une solution possible d'Expert Sexchange, mais cette solution utilise Java et la bibliothèque Net :: Telnet, à laquelle je n'ai pas accès.Comment automatiser la connectivité de test au serveur Windows 2003?

Des idées du camp .NET?

Merci, Dave

Répondre

0

Vous pouvez utiliser l'API WinStationServerPing sans papier pour vérifier la connectivité au Terminal Server. Fondamentalement, si cette fonction réussit, cela signifie que Terminal Server est disponible.

Ceci est la (Delphi) la signature de la fonction (exportée de winsta.dll):

function WinStationServerPing(hServer: HANDLE): BOOLEAN; stdcall; 
+0

Je ne sais pas vraiment si cela va fonctionner, car j'ai changé d'emploi et je n'ai pas accès à l'application d'origine. Pourtant, cela ressemble à la meilleure approche que j'ai entendu jusqu'ici ... – DaveN59

0

Utilisez un TCPClient pour essayer de se connecter aux serveurs sur 3389 (ou tout autre port que vous configuré pour) si vous avez une connexion, déconnexion et signaler le succès, si la connexion est refusée rapport échec.

class Program 
    { 
     static void Main(string[] args) 
     { 
      RDPAvailable("someserver", 3389); 
     } 
     public static bool RDPAvailable(string remoteHost, int port) 
     { 
      bool available=false; 
      try 
      { 
       TcpClient client = new TcpClient(remoteHost, port); 
       client.Close(); 
       available = true; 
      } 
      catch (Exception ex) 
      { 
       //do some logging or whatnot 
      } 
      return available; 
    } 

EDIT: Une partie du code pratique

MsRdpClient51.Server = somServer 
MsRdpClient51.UserName = somUserID 
MsRdpClient51.Domain = someDomain 
MsRdpClient51.AdvancedSettings6.ClearTextPassword = somePassword 
MsRdpClient51.Connect 
+0

Est-ce que vous arrive d'avoir un lien vers un exemple de code? (Je ne veux pas beaucoup, n'est-ce pas?) Dave – DaveN59

+0

Peu importe, je l'ai trouvé dans VS help ... Imagine ça! – DaveN59

+0

lol, Eh bien, voici un exemple de la console de toute façon;) – cmsjr

Questions connexes