2009-10-06 7 views
0

J'ai une application Silverlight qui, sur un bouton, ouvre une page aspx dans une nouvelle fenêtre de navigateur.Silverlight, WCF AspNetCompatibilityRequirements et ASPNET État de session non partagé

Je souhaite transmettre certains détails du nom d'utilisateur/mot de passe de Silverlight à la page aspx. Ma compréhension est que je devrais utiliser les services WCF pour définir l'état de la session, qui peut ensuite être récupéré à partir de la page ASPX.

J'ai suivi ce que je pense être les étapes correctes, mais la page aspx refuse de voir l'état défini par Silverlight.

Ce que j'ai fait est;

  • créé un service WCF qui définit System.Web.HttpContext.Current.Session [ "chose"]
  • Sur ce service, définissez AspNetCompatibilityRequirements = Obligatoire et également définir aspNetCompatibilityEnabled = "true" sur le web.config

Mon application Silverlight est capable de définir (et de récupérer) des informations de session en utilisant ce service WCF avec succès. Cependant, lorsque je reçois Session ["Thing"] sur la page aspx, il est vide. De plus, si je mets Session ["Thing"] sur la page aspx, Silverlight ne comprend pas.

C'est comme si les deux avaient des sessions différentes - pourquoi est-ce?

Merci à l'avance Matt

Répondre

0

Est-il possible que le service WCF auquel votre client Silverlight s'adresse soit dans une autre application Web (par exemple, existe-t-il plusieurs projets Web)? Le fournisseur d'état in-proc par défaut est vraiment par domaine d'application, donc si elles sont dans des applications différentes, vous auriez deux copies de votre état de session dans deux domaines d'application. Si tel est le cas, il suffit de déplacer le code de service dans la même webapp avec les pages, et la vie est bonne. Je ne peux pas penser à une autre explication - je l'ai fait beaucoup de fois sans problème.

+0

Oui! C'est exactement ce que c'était, j'ai mes services dans un projet différent et j'ai ajouté ce service de gestion de session.J'ai déplacé le service de gestion de session dans l'application aspnet et ça marche maintenant bien - merci! –

0

Pour autant que je peux dire, si vous ouvrez la page dans une nouvelle fenêtre du navigateur, il va créer une nouvelle session. Votre seul espoir de partager la session est de créer un objet partagé au niveau du serveur Web (laid). Pourquoi ne pas simplement passer l'état en tant que chaîne de requête? Ou ouvrir la page dans un élément HtmlHostlink text avec SL?

+0

Les informations transmises sont des détails d'authentification pour un rapport que la page ASPX est en cours d'exécution, donc je ne veux pas utiliser une chaîne de requête ou des cookies pour contenir cette information. J'avais regardé le HtmlHost de ComponentOne - mais cela ne me donne-t-il pas le même problème, à savoir en passant des informations à la page aspx dans le HtmlHost? –

+0

Avez-vous regardé le SessionId transmis? Vous pouvez transmettre cela pour obtenir vos données stockées. La valeur est-elle vraiment différente dans les appels de service et les appels de page aspx? Le seul problème que j'ai eu avec les sessions était que je devais supprimer et réinitialiser le module d'authentification sur IIS 7 pour obtenir les informations d'identification de l'utilisateur pour les gestionnaires HTTP. – R4cOON

+0

L'ID de session est identique. Je suppose que je pourrais persister les données en SQL sur le serveur, mais j'espérais garder les choses simples. –

Questions connexes