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

Services Web Discussion :

Récupérer IP client dans wcf


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut Récupérer IP client dans wcf
    Bonjour,

    Je suis confronter à un problème : compter le nombre de client connecté à mon web service.

    J'ai pensé à comptabilisé le nombre de connexion en différenciant le nombre d'ip différente connecté à mon web service.

    J'ai essayé de récupéré en vain l'adresse IP du client à sa connexion avec toutes les différentes méthodes que j'ai pu trouver sur internet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    private string GetCustomerIP()
            {
                string CustomerIP = "";
                try
                {
                    if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
                    {
                        CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
                    }
                    else
                    {
                        CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
                    }
                }
                catch
                { }
     
                try
                {
                    CustomerIP = System.Web.HttpContext.Current.Request.UserHostAddress;
                }
                catch
                { }
     
                try
                {
                    CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
                catch
                { }
     
                try
                {
                    string clientIP;
                    string ip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                    if (!string.IsNullOrEmpty(ip))
                    {
                        string[] ipRange = ip.Trim().Split(',');
                        int le = ipRange.Length - 1;
                        clientIP = ipRange[le];
                    }
                    else
                        clientIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
                catch
                { }
     
                // Get message properties from current OperationContext
                System.ServiceModel.Channels.MessageProperties props = System.ServiceModel.OperationContext.Current.IncomingMessageProperties;
     
                // Find the RemoteEndpointMessageProperty
                System.ServiceModel.Channels.RemoteEndpointMessageProperty prop = (System.ServiceModel.Channels.RemoteEndpointMessageProperty)props[System.ServiceModel.Channels.RemoteEndpointMessageProperty.Name];
     
                // Retrieve the IP address
                string addr = prop.Address;
                int iPort = prop.Port;
     
                return addr;
            }
    Seulement toutes ces fonctions me retourne l'erreur suivante :
    La valeur n'est pas comprise dans la plage attendue.
    Et l'utilisation du OperationContext me retourne une chaine d'adresse vide ("") !

    J'utilise un web service avec une liaison WSDualHttpBinding et les caractéristique suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    Avez vous une idée d'où le problème peut venir ? et/ou Avez vous d'autres propositions pour connaitre le nombre de client actuellement connecté ?

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Pour utiliser System.Web.HttpContext.Current.Request.UserHostAddress, il faut au préalable vérifier que la comptabilité ASP.NET est activée dans le web.config :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    </system.serviceModel>
    Cela permet d'accéder au contexte ASP.NET.

    Sinon, il y a une autre méthode décrite ici : Detect Client IP in WCF 3.5.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut
    Oui ça c'est déjà fait aussi (la configuration du web.config) et la méthode montré dans le lien c'est exactement la même que celle que je fait à la fin avec OperationContext et où j'obtient une adresse vide ("")

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Etrange, en tout cas ça risque d'être compliqué de faire ce que tu veux, car les connexions ne durent que quelques secondes à chaque fois. En plus l'IP n'identifie pas forcément une seule et unique personne.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 232
    Par défaut
    Oui je le reconnais. Enfin pour l'instant j'ai pas trop encore décidé de ce que j'allais faire exactement mais vu que j'avais pensée à cette solution j'aurais aimé au moins réussir à récupéré l'IP pour finir mon test.

    Après je suis aussi preneuse d'autre solution ou proposition en ce qui concerne la gestion des sessions utilisateurs et/ou instance du web service. Le but étant de pouvoir détecter la connexion d'un utilisateur et sa déconnexion.

    Ceci afin de comprendre comment fonctionne ce système et de voir les différentes possibilités. Sachant que je cherche au final à vérifier si les identifiants d'un utilisateur son bien utilisé que par une personne à la fois.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Nanais19 Voir le message
    Oui je le reconnais. Enfin pour l'instant j'ai pas trop encore décidé de ce que j'allais faire exactement mais vu que j'avais pensée à cette solution j'aurais aimé au moins réussir à récupéré l'IP pour finir mon test.
    Il faudrait analyser ton web.config et ton code, il doit y avoir quelque chose qui coince, mais ça ne doit pas être évident à trouver.

    Citation Envoyé par Nanais19 Voir le message
    Après je suis aussi preneuse d'autre solution ou proposition en ce qui concerne la gestion des sessions utilisateurs et/ou instance du web service. Le but étant de pouvoir détecter la connexion d'un utilisateur et sa déconnexion.

    Ceci afin de comprendre comment fonctionne ce système et de voir les différentes possibilités. Sachant que je cherche au final à vérifier si les identifiants d'un utilisateur son bien utilisé que par une personne à la fois.
    Pourquoi ne pas récupérer ces infos côté client puis les envoyer à ton web service ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/02/2013, 16h09
  2. Réponses: 2
    Dernier message: 04/04/2012, 19h16
  3. Récupérer les messages dans une application cliente
    Par NetLandGim dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/08/2011, 14h19
  4. récupérer ip client WCF 3.0
    Par giova_fr dans le forum Windows Communication Foundation
    Réponses: 10
    Dernier message: 03/06/2011, 12h36
  5. Réponses: 6
    Dernier message: 30/04/2004, 15h53

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