J'écris un programme qui a à la fois un système de configuration ASP.NET et une application Silverlight. La plupart des utilisateurs resteront sur la page Silverlight et ne visiteront pas le site ASP.NET, sauf pour vous connecter, etc. p>
Le problème est que la session est nécessaire pour rester active à des fins d'authentification, mais la session tient le délai d'attente même si l'utilisateur utilise les fonctionnalités de l'application Silverlight. P>
Des idées? P>
3 Réponses :
J'ai effectivement trouvé un piratage assez cool qui incorpore essentiellement une iframe sur la même page que l'application Silverlight. L'IFRAME contient une page Web ASPX qui se rafraîchit toutes les minutes (session.timeout - 1). Cela empêche la session en vie si longtemps, l'application Silverlight est ouverte.
Pour ce faire: P>
Créer une page ASP.NET appelée "Keepalive.aspx". Dans la section Head de cette page, ajoutez ceci: p> dans le code derrière le fichier, ajoutez ceci: p> <iframe id="KeepAliveFrame" src="KeepAlive.aspx" frameborder="0" width="0" height="0" runat="server" />
Malheureusement, cela semble que cela ne fonctionne pas dans IE8 (au moins).
Sur la page Hébergement du contrôle Silverlight, vous pouvez configurer une minuterie JavaScript et faire un appel AJAX à un gestionnaire HTTP (.achx) toutes les 5 minutes pour garder la session en vie. Assurez-vous d'implémenter votre classe de manutention Je recommande le gestionnaire car il est plus facile de contrôler le texte de réponse renvoyé, et c'est plus léger puis une page ASPX. P > Vous devrez également définir le cache de réponse correctement pour vous assurer que le navigateur rend l'appel AJAX à chaque fois. P> Mise à jour P> ICI est le code d'exemple pour un HTTPHANDLER P> euxquiressstate code>.
setInterval(ping, 5000);
function ping() {
$.get('/Ping.ashx');
}
Il est plus léger qu'une page ASPX presque vierge? Je suis un peu un débutant à Asp.net/ajax et cela semble être plus compliqué. Pouvez-vous fournir un échantillon du fichier ashx que je devrais utiliser?
J'ai essayé cela et le JavaScript ne semble pas fonctionner dans IE8. Je viens de télécharger la dernière version de JQuery à cet effet. Y a-t-il quelque chose d'autre que le gestionnaire / page a besoin?
Il n'y a rien d'autre dont vous avez besoin. Il y a un excellent outil appelé Fiddler2 que vous pouvez utiliser pour regarder le trafic réseau et vous assurer que l'appel est en cours. Cela pourrait être un problème de chemin, auquel cas Fiddler signalerait un 404. Je recommanderais d'utiliser cet outil pour voir ce qui se passe. Sinon, IE8 a de bons outils de débogage JavaScript qui pourraient également vous rapprocher.
Est-il nécessaire d'utiliser le gestionnaire si j'utilise ASP.NET-MVC?
Si vous appelez un gestionnaire, oui, vous en avez encore besoin. Si vous appelez à une action de contrôleur, vous n'en auriez pas besoin.
L'approche Ajax Ping / httphandler est bonne, mais la fonction JQuery $ .get est attendue d'un résultat JSON et jette une erreur d'analyse JavaScript. P>
J'ai modifié le ping httphandler pour renvoyer "{}" au lieu de "ok" et cela a fonctionné mieux. P>
Vous pouvez spécifier le type de réponse que vous souhaitez obtenir lors de l'utilisation $.