Плагин Silverlight и сессия ASP.NET - PullRequest
1 голос
/ 06 апреля 2011
  1. истечет ли время / истекает ли время сеанса страницы ASP.NET, на котором размещается плагин Silverlight, если с плагином Silverlight не выполняется работа / взаимодействие?

  2. если время ожидания сеанса ASP.NET составляет, скажем, 20 минут, а пользователь продолжает взаимодействие с плагином Silverlight в течение сорока минут, будет ли время ожидания сеанса ASP.NET или нет?

Примечание:

по сеансу, я имею в виду переменные сеанса, используемые в моем WCFservice и на странице хоста ASP.NET,

1 Ответ

4 голосов
/ 06 апреля 2011

Ответ - просто да, истечет время ожидания.

Вы должны увидеть приложение Silverlight как приложение javascript или как любое приложение для настольного компьютера.Если вы не выполняете явное взаимодействие с приложением ASP.NET во время выполнения приложения SL, ASP.NET не будет знать, что ваш пользователь активен: ASP.NET может обновлять сеансы только по HTTP-запросу.

Но вы можете поддерживать сеанс из приложения Silverlight, отправляя запросы на свой веб-сайт (так называемые запросы keepalive или что-то более полезное, это зависит от ваших требований)

Используйте стек браузера для отправки файлов cookieв ASP.NET с вашим запросом, используя класс WebClient в Silverlight.Таймер javascript и jquery тоже могут сработать, если вы не хотите выполнять эту логику в своем приложении SL (поэтому не допускайте этих соображений)

Поддерживайте активность с Silverlight

Сетевой стек браузера по умолчанию включен в Silverlight, поэтому, если вы ничего не изменили, ваше приложение будет его использовать.

Если вы хотите реализовать только поддержку активности для вашего сеансадобавьте на свой сайт URL-адрес, обрабатываемый ASP.NET (файл aspx или маршрут, обработчик ... в зависимости от реализации вашего веб-сайта (например, /KeepAlive.aspx))

в вашем Silverlightприложение, используйте этот код, чтобы добавить таймер в приложение.Он будет выполнять веб-запрос через класс WebClient каждые X минут.

var timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0,5,0)//run every 5 minutes (should be shorter than your session timeout.
timer.Tick+=(s,args)=>
  {
    var client = new WebClient();
    client.DownloadStringAsync(keepAliveUrl);
  };
timer.Start();

Код должен вызываться после запуска приложения (например, в файле App.xaml.cs)

Поддерживайте активность с JS (JQuery)

На своей странице хостинга SL используйте JQuery , чтобы выполнить тот же запрос get на сервере, каждый Xминут от загрузки страницы.

$.get('/KeepAlive.aspx', function(data) {});
...