2011-04-06 47 views
1
  1. 当Silverlight插件没有完成任何工作/交互时,托管Silverlight插件的ASP.NET页面的会话是否会过期/超时?Silverlight插件和ASP.NET会话

  2. 如果ASP.NET会话超时时间为20分钟,并且用户继续与Silverlight插件交互40分钟,ASP.NET会话是否超时?

注:

通过会议,我指的是在我的WCFservice和ASP.NET主机页面上使用的会话变量,

回答

4

简单的答案是肯定的,它会超时。

您应该将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) {}); 
+0

谢谢,是的请,导师,链接,例子,你提到的三种方法将是有益的。目前我将需要此功能来保持会话活着,但如何和最佳方式将取决于我何时需要在实际项目中实现它, – user287745 2011-04-06 07:40:23

+0

我提供了有关该主题的更多信息。 – Eilistraee 2011-04-07 10:01:26