IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

GetActiveTcpListeners() => ArgumentOutOfRangeException


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut GetActiveTcpListeners() => ArgumentOutOfRangeException
    Bonjour à tous,

    Un petit problème se pose.
    Lorsque j'appelle la méthode GetActiveTcpListeners() de la classe IPGlobalProperties, je me prends un ArgumentOutOfRangeException.
    En ayant un peu recherché, il s'agirait d'une exception lancée par le framework lors de la construction des IPEndPoint, et plus particulièrement de l'assignation de sa propriété Port.
    En effet la classe IPEndPoint possède deux constantes définissant les limites des ports autorisés : MinPort et MaxPort. Il suffirait alors qu'il existe une connexion TCP utilisant un port n'étant pas dans la plage autorisée, et l'exception serait lancé.

    Ma question est donc quel est le moyen pour récupérer la liste des ports utilisés sur une machine sans passer par une instanciation d'IPEndPoint.

    Merci d'avance

  2. #2
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    IPGlobalProperties est une classe abstraite donc je pense que tu auras du mal à utiliser l'une de ses méthodes. Pourrais-tu vérifier et nous dire quelle classe dérivée de IPGlobalProperties tu utilises?

  3. #3
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    J'utilise ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
    IPEndPoint[] activeTcpListeners = ipProperties.GetActiveTcpListeners();

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    OK, donc tu utilises SystemIPGlobalProperties comme classe réelle (qui elle implémente IPGlobalProperties).

    Effectivement, lors de la création d'un IPEndPoint, le framework va vérifier le port est bien supérieur ou égale à 0 et inférieur ou égale à 65535.

    Par contre, en examinant le code, il est difficile de te donner une explication de pourquoi un port invalide est passé. Il serait intéressant d'activer le débugging du framework et le téléchargement de son code source afin de mettre un point d'arrêt dans la classe SystemIPGlobalProperties, méthode GetAllTcpConnections(), sur les lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list.Add(new SystemTcpConnectionInformation(row));
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list.Add(new SystemTcpConnectionInformation(pid2));
    et d'inspecter le contenu de row et pid2.

    Je ne peux pas t'aider plus que cela.

  5. #5
    Membre confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Par défaut
    OK Merci

    Le soucis, est que je ne peux pas faire de debugging, car l'erreur se produit seulement lorsque mon application est déployée sur un serveur(CITRIX) sur lequel je n'ai pas accès, donc je fais de la correction à l'aveuglette.. Pour moi il doit y avoir un listerner TCP sur ce serveur, utilisant un port n'étant pas dans l'intervalle [0-65535]..

  6. #6
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Ce qui est impossible vu que les ports en TCP/IP ne peuvent excéder 65535.

    Je pense plutôt que le framework récupére une information qu'il l'exploite mal, dans la méthode que j'ai observée, y'a un tas d'appel externe au framework (API windows), et il se peut qu'un paramètre soit mal formaté.

    Peux tu vérifier tes résultats avec un outil comme TCPView (Sysinternals)?

    Chez moi, ce petit bout de code fonctionne à merveille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (var ep in IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners())
    {
    	Console.WriteLine(ep);
    }
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    0.0.0.0:1026
    0.0.0.0:1027
    0.0.0.0:1028
    0.0.0.0:1029
    0.0.0.0:47001
    127.0.0.1:1434
    127.0.0.1:5354
    127.0.0.1:14452
    127.0.0.1:14769
    127.0.0.1:47873
    127.0.0.1:64295
    192.168.61.6:139

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/05/2010, 10h59
  2. ArgumentOutOfRangeException et dataGridView
    Par amirad dans le forum VB.NET
    Réponses: 14
    Dernier message: 29/07/2009, 15h18
  3. System.ArgumentOutOfRangeException est l'erreur
    Par christianf dans le forum C#
    Réponses: 6
    Dernier message: 15/03/2008, 19h19
  4. Réponses: 2
    Dernier message: 08/02/2008, 13h18
  5. Réponses: 2
    Dernier message: 04/07/2006, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo