Question

Le scénario: J'ai une application PRISM développée en Silverlight (4), et j'utilise une application côté serveur ASP.NET pour héberger plusieurs services web (qui, à son tour, les accès WCF services, 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 sont pas nécessairement sur le même serveur hébergeant l'application silverlight).

L'application Silverlight se compose de plusieurs modules, chacun d'accéder 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 différents modules d'accès aux services Web, je reçois 2 nouvelles sessions sur le serveur web. J'aurais pensé que, puisque les deux modules vivent sur la même page HTML (et puis aussi dans la même session du navigateur), ils obtiendraient la même session sur le serveur web ...?

J'ai essayé de faire le service Web-client proxy disponible au niveau mondial dans le conteneur (en utilisant l'unité), en enregistrant une instance (en utilisant Container.RegisterInstance), puis obtenir cette instance chaque fois qu'un besoin de module pour faire un Web- appel de service (en utilisant Container.Resolve), mais cela ne semble pas aider.

Toutefois, les appels effectués dans le même module obtient toujours la même session sur le serveur.

Quelqu'un peut-il voir ce que je suis absent ici ...?

Merci!

Jon

Était-ce utile?

La solution

On dirait que je trouve ma propre réponse.

Le problème était que ma demande a été mise à feu multiples appels de service Web lors du démarrage (les différents modules PRISM travaillant indépendamment). Et lorsque plusieurs appels ont été faites avant que des réponses a été donné à partir du serveur web, aucune session (et donc aucun cookie « ASP.NET_SessionId » a été fourni) au client avant que les appels ultérieurs ont été faites.

Ma solution était de faire faire que I un appel (async comme toujours), par exemple à un simple Ping comme service Web, puis maintenez tous les autres appels vers le serveur Web jusqu'à ce réponse est de retour. Ensuite, tous les appels sont données de la même session sur le serveur (parce que maintenant ils contiennent tous les cookies « ASP.NET_SessionId » dans l'en-tête).

En pratique, cet appel est fait par le PRISM-shell, et aucun module ne beeing chargé avant que je reçois le Reponse. Ensuite, je suis absolument certain qu'aucun des autres modules obtenir la gâchette avant d'avoir une séance d'état sur place.

Pourtant, si quelqu'un voit tout autre problème avec cette solution, je suis plus qu'heureux de vous entendre.

Merci!

Jon

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top