2010-05-05 4 views
1

Le scénario: J'ai une application PRISM développée dans Silverlight (4) et j'utilise une application côté serveur ASP.NET pour héberger plusieurs services Web (qui , à son tour, accède aux services de la WCF, mais ce n'est pas vraiment important ici). L'application Silverlight doit pouvoir appeler les services Web inter-domaines (ce qui signifie que les services Web ne se trouvent pas nécessairement sur le même serveur hébergeant l'application Silverlight).Utilisation de l'état de session ASP.NET avec Silverlight (PRISM)

L'application Silverlight se compose de plusieurs modules accédant chacun aux services Web ASP.NET.

Je n'ai pas beaucoup d'expérience avec Silverlight et PRISM, mais pour autant que je peux voir, ce n'est pas un scénario très inhabituel ...

Le problème: Mon challange est que, lorsque 2 modules différents accéder aux services web, j'obtiens 2 nouvelles sessions sur le serveur web. J'aurais pensé que puisque les deux modules vivent sur la même page HTML (et aussi dans la même session de navigation), ils auraient la même session sur le serveur web ...?

J'ai essayé de rendre le Proxy-client web-service globalement disponible dans le conteneur (en utilisant Unity), en enregistrant une instance (en utilisant Container.RegisterInstance), puis en obtenant cette instance chaque fois qu'un module doit créer un web -service call (using Container.Resolve), mais cela ne semble pas aider. Cependant, tous les appels effectués au sein d'un même module reçoivent toujours la même session sur le serveur.

Quelqu'un peut-il voir ce qui me manque ici ...?

Merci!

Jon

Répondre

1

On dirait que j'ai trouvé ma propre réponse.

Le problème était que mon application tirait plusieurs appels de service Web au démarrage (les différents modules PRISM fonctionnant indépendamment). Et lorsque plusieurs appels ont été faits avant que des réponses aient été données par le serveur web, aucune session (et par conséquent aucun cookie "ASP.NET_SessionId" n'a été fourni) n'a été renvoyée au client avant que des appels ultérieurs ne soient faits.

Je devais m'assurer que je fais un appel (asynchrone comme toujours), par exemple à un simple service web de type Ping, puis maintenez tous les autres appels sur le serveur web jusqu'à ce que cette réponse soit de retour. Ensuite, tous les appels suivants reçoivent la même session sur le serveur (car ils contiennent tous le cookie "ASP.NET_SessionId" dans l'en-tête).

En pratique, cet appel est effectué par le shell PRISM, et aucun module n'est en cours de chargement avant que je reçoive la réponse. Ensuite, je suis absolument certain qu'aucun des autres modules ne sera déclenché par la détente avant d'avoir un état de session en main.

Néanmoins, si quelqu'un voit d'autres problèmes avec cette solution, je suis plus qu'heureux d'avoir de vos nouvelles.

Merci!

Jon

Questions connexes