2010-09-30 5 views
0

J'ai plusieurs services Web. Un de ces services est utilisé pour récupérer un identifiant de session (authentification). Je transmets cet identifiant lorsque j'appelle d'autres services via SessionInfo. Je veux utiliser WCF au lieu des méthodes Web classiques. Comment puis-je partager une session entre plusieurs clients de wcf?Comment partager une session entre plusieurs clients de wcf?

Répondre

2

On ne sait pas ce que vous entendez par session. WCF prend en charge quatre types de sessions:

  • Session de transport - pour le protocole de transport qui maintient la session entre le serveur et le client. Par exemple: Net.Tcp, Net.Pipe
  • Session fiable - prise en charge d'une distribution fiable sur un canal non fiable si le client et le serveur sont en cours d'exécution
  • Session de sécurité - le client doit être authentifié uniquement pour le premier appel, après les appels sont authentifiés par le jeton de session. Cette session est également appelée contexte de sécurité.
  • Session d'application - ceci a une signification pour les paramètres IsInitiating et IsTerminating du contrat d'opération et de l'instanciation PerSession. Cette session peut être utilisée uniquement si l'une des sessions précédentes est également utilisée = elle ne peut pas être utilisée dans BasicHttpBinding car elle ne prend pas en charge les sessions de transport, de fiabilité et de sécurité.

Toutes ces sessions sont liées à la communication entre un proxy client unique et une instance de service unique. Rien d'autre n'est fourni hors de la boîte. De plus, il n'y a pas d'objet "session" spécial.

Alors, qu'essayez-vous exactement de réaliser? Allez-vous remplacer les services ASMX utilisant la session ASP.NET? Dans ce cas, vérifiez ce sample.

Edit:

L'idée de recevoir seul identifiant du premier service et la réutilisation de cette identification sur les appels suivants à plusieurs services devrait être appelé corelation (une grande activité/transaction) ou d'une fédération (sécurité liée) non session.

+0

Ma question est un peu stupide .. J'ai résolu le problème d'une autre manière. Mais votre réponse est très intéressante et utile pour moi. – RredCat

0

Comme marc_s dit que vous ne pouvez pas partager la session. Mais ce que vous pouvez faire est de passer l'identifiant de session en tant que paramètre dans vos appels WCF, de sorte que vous sachiez sur qui l'appel est fait.

Assurez-vous d'utiliser le cryptage sur ces appels.

0

La manière recommandée est de maintenir manuellement l'état de la session entre les appels. Vous générez des ID de session comme vous le souhaitez et chargez/conservez les informations de session dans une base de données à chaque appel en utilisant votre propre logique.

En faisant cela, vous soutiendrez les sessions d'une manière qui permettra:

  • équilibrage de charge
  • session de partage
  • fail over
Questions connexes