2013-04-18 3 views
1

J'ai un service Web wcf + repos avec aspNetCompatibility = "true". Pour fournir une authentification personnalisée, j'ai écrit le module http asp.net: IHttpModule. Le code est assez simple: il suffit d'assigner un principal à la propriété Thread.CurrentPrinicpal.WCF défini Thread.CurrentPrincipal via IHttpModule

Lors de l'exécution de la méthode, j'obtiens toujours le principal 'empty/default' comme valeur de Thread.CurrentPrincipal. J'ai aussi remarqué qu'il y a différents identifiants de threads (Thread.CurrentThread) dans l'exécution du module et de l'opération. J'ai une suggestion que wcf fournisse un nouveau thread pour exécuter l'opération, mais n'a trouvé aucune preuve. Donc la question: Ai-je raison? Est-ce que wcf permet de contrôler ce comportement? Je suis confus ici car la création d'un nouveau thread va automatiquement déplacer le principal vers un nouveau thread. Donc wcf les "nettoie" ..

Le même problème avec principalPermissionMode = "Aucun".

J'apprécierais pour des idées!

À la votre!

Répondre

0

Le thread IMO recevra le principal lorsque vous l'exécutez à partir du thread avec déjà saturé. Wcf gère les threads à sa guise (partiellement contrôlé par InstanceMode - PerCall, PerSession, ...). Donc, ils ne vont pas propager vos détails de fil.

Peut-être devriez-vous envisager d'utiliser un autre modèle pour l'authentification. Voir cet article pour plus de détails sur l'authentification personnalisée: http://blogs.msdn.com/b/astoriateam/archive/2010/07/21/odata-and-authentication-part-6-custom-basic-authentication.aspx

+0

Vous avez raison avec la première phrase. En fait, j'ai résolu par IAuthorizationPolicy avec wcf. Mais comme je l'ai écrit, je veux comprendre clairement pourquoi cela fonctionne de cette façon et avons-nous des paramètres pour contrôler ce comportement? – SchmerZ