2009-01-19 5 views
8

Je valide les utilisateurs à l'aide de UserNamePasswordValidator.Validate (nom d'utilisateur de chaîne, mot de passe de chaîne) et le service s'héberge lui-même (par exemple, aucun IIS).Lire l'adresse IP d'un appelant dans WCF (OperationContext est null)?

Le problème que j'ai, c'est que si l'utilisateur échoue à la validation, je veux suivre l'adresse IP des utilisateurs. Cela fonctionne bien de l'utilisateur est validé, parce qu'alors le OperationContext a été initialisé (il est null dans la méthode de validation et n'est pas créé plus tard).

Est-ce que quelqu'un sait comment obtenir l'adresse IP du client dans la méthode de validation ou avant que la méthode de validation ait été exécutée?

Oui, je sais que sur la façon d'obtenir l'adresse IP à l'aide RemoteEndpointMessageProperty mais comme je l'ai dit, il n'a jamais aller aussi loin si la validation échoue :-)

+1

J'ai le même problème, et mes recherches sont encore là. Je pense que ce ne serait peut-être pas possible. :( – Randolpho

Répondre

1

J'ai fait des recherches sur cette mort toute la semaine, et je peux Ne venez pas avec une seule entrée de blog ou un article MSDN qui traite de la question. Dans la mesure où je peux dire, vous ne pouvez pas enregistrer l'adresse IP pendant l'étape de validation.

La seule solution de contournement que je peux suggérer est d'héberger dans IIS et d'y utiliser les weblogs, qui enregistrent l'adresse IP. C'est douloureux, malheureusement, mais c'est peut-être le seul moyen.

0

Si vous hébergez dans IIS, cela devient beaucoup plus simple. Ce morceau de config provient directement de mon projet Web hôte et force les demandes ASP.NET à descendre dans le pipeline IIS plutôt que d'être directement envoyées vers les bits d'erreur ASP d'IIS.

aspNetCompatibilityEnabled: Lorsque cet attribut est défini sur true, demandes de services Windows Communication Foundation (WCF) de flux à travers le pipeline HTTP ASP.NET et la communication sur protocoles non-HTTP est interdite.

Voir: http://msdn.microsoft.com/en-us/library/ms731336.aspx

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

J'utilise le AuthenticationService et utiliser HttpContext pour obtenir tous les trucs intéressants sur le client, une grande partie est utile pour des choses comme assurant un utilisateur ne se connecte pas à partir de six sous-réseaux différents ainsi que de jouer avec des cookies.

Bien que je pense que cela est appliqué à la MS AuthenticationService, tous les autres services que vous avez en aurez besoin attrib:

[AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Si vous voulez poursuivre votre non -IIS hébergé itinéraire de service, alors je verrais ce que les choses sont disponibles dans l'API MS en utilisant la réflexion, piquer autour d'un WCF avec le débogueur à l'arrêt, dépliant tous ces membres non-publics.

Je suppose que le problème sera d'obtenir une référence à un peu de WCF qui est initialisé à partir de laquelle commencer à piquer. Vous devrez peut-être enregistrer une sorte d'écouteur auprès de l'un des répartiteurs lorsque vous configurerez l'hôte de service.

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.channeldispatcher.aspx

Edit:

Ajouter ce lien que mes pensées sont que vous auriez besoin d'obtenir à des choses dans WCF qui est juste en bas de la pile avant qu'il arrive à votre code:

http://blogs.msdn.com/sonuarora/archive/2007/06/11/passing-soap-actions-to-adapter-inbound-handler-for-filtering-type-of-listeners.aspx

+0

J'ai essayé cette option avec mon service Web SOAP basé sur basicHttpBinding et je trouve toujours que OperationContext.Current est null dans la méthode UserNamePasswordValidator.Validate() – BrettRobi

+0

"J'utilise AuthenticationService et utilise le HttpContext pour obtenir les choses intéressantes sur le client "- c'est-à-dire une fois que vous avez défini la compatibilité ASP.NET, vous utilisez le HttpContext.Current exactement comme vous le feriez sur un site web.Vous vous souvenez de la question" Comment lire l'adresse IP de l'appelant " –

Questions connexes