当Silverlight插件没有完成任何工作/交互时,托管Silverlight插件的ASP.NET页面的会话是否会过期/超时?Silverlight插件和ASP.NET会话
如果ASP.NET会话超时时间为20分钟,并且用户继续与Silverlight插件交互40分钟,ASP.NET会话是否超时?
注:
通过会议,我指的是在我的WCFservice和ASP.NET主机页面上使用的会话变量,
当Silverlight插件没有完成任何工作/交互时,托管Silverlight插件的ASP.NET页面的会话是否会过期/超时?Silverlight插件和ASP.NET会话
如果ASP.NET会话超时时间为20分钟,并且用户继续与Silverlight插件交互40分钟,ASP.NET会话是否超时?
注:
通过会议,我指的是在我的WCFservice和ASP.NET主机页面上使用的会话变量,
简单的答案是肯定的,它会超时。
您应该将Silverlight应用程序视为JavaScript应用程序或任何桌面应用程序。如果您在执行SL App时没有明确地执行与ASP.NET应用程序的交互,ASP.NET将不会知道您的用户处于活动状态:ASP.NET只能在HTTP请求上刷新会话。
但是你可以通过发送请求到您的网站保持与Silverlight应用程序会话(又名保活请求,或者更有用的东西,这取决于你的需求)
使用浏览器堆栈的饼干发送到ASP .NET与您的请求使用Silverlight中的WebClient类。一个JavaScript计时器和jQuery可以做的伎俩,如果你不想从你的SL应用程序(因此将其与这些考虑免费)执行此逻辑
保持活跃的Silverlight
浏览器网络堆栈在Silverlight上默认启用,因此如果您没有更改任何内容,您的应用程序将使用它。
如果您只想为会话实现保持活动状态,请向您的站点添加由ASP.NET处理的URL(aspx文件或路由,处理程序......取决于您的网站实现(用于实例/KeepAlive.aspx))
在您的silverlight应用程序中,使用此代码将timer添加到应用程序中。它将每隔X分钟通过WebClient课程执行一次网络请求。
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可以在页面加载后每隔X分钟在服务器上执行相同的获取请求。
$.get('/KeepAlive.aspx', function(data) {});
谢谢,是的请,导师,链接,例子,你提到的三种方法将是有益的。目前我将需要此功能来保持会话活着,但如何和最佳方式将取决于我何时需要在实际项目中实现它, – user287745 2011-04-06 07:40:23
我提供了有关该主题的更多信息。 – Eilistraee 2011-04-07 10:01:26