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 :

HttpContext.Current NULL dans une bibliothèque de classe


Sujet :

Services Web

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 47
    Par défaut HttpContext.Current NULL dans une bibliothèque de classe
    Bonjour,
    Dans une bibliothèque de classe (Dont je fais reférence dans un projet WEB Service WCF) je souhaite reccupérer le nom et l'adresse IP du client.
    Problème, HttpContext.Current est NULL (donc pas de HttpContext.Current.User.Identity.Name et HttpContext.Current.Request.UserHostAddress).
    SVP comment puis je resoudre ce problème?
    NB:
    1-Le même code dans un projet ASP.net fonctionne bien.
    2-Lorque j'utilise mon Web service WCF (par ajout dune reférence) dans un projet ASP.NET,HttpContext.Current est NULL
    3-Environnements:VISUAL STUDIO 2010,C#, Windows 7
    Merci d'avance

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour,

    Citation Envoyé par lamyruth Voir le message
    Dans une bibliothèque de classe (Dont je fais reférence dans un projet WEB Service WCF) je souhaite reccupérer le nom et l'adresse IP du client.
    Problème, HttpContext.Current est NULL
    HttpContext est spécifique aux web service ASP.Net et n'existe pas dans les web service WCF. La cause en est simple : le code d'un service WCF (web ou pas), contrairement à un web service ASP.Net, est "agnostique au protocole", c'est à dire qu'il peut être opéré avec du HTTP/SOAP mais aussi avec du TCP direct en sérialisation binaire, ou quoi que ce soit d'autre en réécrivant éventuellement un binding ad-hoc.

    A vrai dire, et c'est même une pratique courante, tu peux utiliser le même code pour exposer un web service HTTP/SOAP (pour le monde extérieur, hétérogène) et un service WCF Tcp binaire (par exemple, pour les application internes en .Net) qui sera beaucoup plus performant (ratio charge utile/charge de protocole), et cela simplement de manière déclarative dans le fichier config.

    Or, tout cela impose qu'on ne fasse pas référence dans le code du service à quelque chose de spécifique au protocole.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 47
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    HttpContext est spécifique aux web service ASP.Net et n'existe pas dans les web service WCF.
    Bonjour et Merci pour ta réponse Bluedepp.
    Comment avec un Web service WCF on récuppère le nom de l'utilisateur et l'adresse IP ?
    Merci

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Ca n'a pas forcement de sens que de récuperer l'ip: Quid d'un binding NamedPipeBinding qui n'utilise pas le protocole ip?
    Le nom d'utilisateur peut lui se récuperer avec ServiceSecurityContext.Current.PrimaryIdentity.Name

    Si toutefois tu souhaites forcer ton service à utiliser le contexte http sur iis tu peux décorer l'implémentation de ton service comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    Et mettre dans le fichier web.config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <system.serviceModel>
    	<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    </system.serviceModel>

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 47
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Ca n'a pas forcement de sens que de récuperer l'ip: Quid d'un binding NamedPipeBinding qui n'utilise pas le protocole ip?
    Le nom d'utilisateur peut lui se récuperer avec ServiceSecurityContext.Current.PrimaryIdentity.Name

    Si toutefois tu souhaites forcer ton service à utiliser le contexte http sur iis tu peux décorer l'implémentation de ton service comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    Et mettre dans le fichier web.config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <system.serviceModel>
    	<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    </system.serviceModel>
    Bonjour et merci pour ta proposition Nathanael ,
    j'ai fait exactement ce que tu recommandes et malheureusement ,
    j'ai toujours l'erreur:
    System.ServiceModel.ServiceSecurityContext.Current' is null
    du fait que System.ServiceModel.ServiceSecurityContext est nul
    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    TU utilises quel type de binding ?

    Normalement la solution proposée par Nathanael devrait résoudre ton problème et ça a été le cas pour la plupart des gens qui ont eu ce type de problème. Il suffit de rechercher sur le net pour constater le résultat.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 47
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    TU utilises quel type de binding ?

    Normalement la solution proposée par Nathanael devrait résoudre ton problème et ça a été le cas pour la plupart des gens qui ont eu ce type de problème. Il suffit de rechercher sur le net pour constater le résultat.
    Bonjour j'utilise: BasicHttpBinding comme type de binding !
    J'ai du mettre
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/> pour que cette solution de Nathanael fonctionne dans un projet silverlight.
    Merci

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 47
    Par défaut
    Bonsoir,je me permets de reouvrir ce sujet.en effet,la solution proposée fonctionne lorsque le service WCF est en local;publié sur le serveur distant,l'adresse Ip du poste de l'utilisateur est recuperée et pas le username.
    STP faut il une configuration particuliere su Webservice?(Sur II7,le mode d'autentification est windows,le mode anonyme étant desactivé)
    Merci d'avance
    Ruth

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

Discussions similaires

  1. Déréférencement d'un pointeur null (dans une classe)
    Par polymorphisme dans le forum Langage
    Réponses: 5
    Dernier message: 13/09/2012, 15h44
  2. Web Service dans une bibliothèque de classe
    Par Mar1.NET dans le forum Services Web
    Réponses: 1
    Dernier message: 07/09/2012, 12h26
  3. [2.x] Attribut NULL dans une classe Symfony2
    Par ashanka dans le forum Symfony
    Réponses: 2
    Dernier message: 05/01/2012, 11h16
  4. Style dans le Generic.xaml pour un CustomControl d'une bibliothéque de classe
    Par olsimare dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 21/06/2008, 22h35
  5. Réponses: 11
    Dernier message: 12/08/2006, 10h22

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