我正在尝试为ASP.NET网站构建超时功能。这个想法是,在一定程度的不活动之后,浏览器将被重定向到登录页面。 (登录页面的代码隐藏清除身份验证,所以一旦你在那里,你必须登录以获得其他任何地方。)
现在在旧式页面中,只需设置元刷新标签即可完成回发。任何操作都涉及回发,这意味着新页面和重置元刷新标记。
使用UpdatePanels和部分回发,这不能很好地工作。执行部分回发不会重新加载页面,因此元刷新永远不会重置。即使用户在页面上非常活跃,也会将用户重定向到登录状态。不好。
修复方法是使用javascript而不是meta-refresh。由windows.setInterval()运行的一些代码将当前时间与上次活动的时间进行比较,并在必要时进行重定向。很简单,但是......
关键位是设置上次活动时间。对于部分回发,可以通过在一个或多个Sys.WebForms.PageRequestManager事件上设置处理程序来完成。我目前正在使用initializeRequest,它工作正常。在每个部分回发的开始,我重置最后一个活动变量,一切都很好。除了...
在我的一些页面上,我还有通过异步调用.asmx web服务执行的代码。这些不会通过Sys.WebForms.PageRequestManager生命周期,并且永远不会调用initializeRequest。
我可以围绕这些调用进入javascript,并添加一些重置最后一个活动变量,但我宁愿不这样做。我宁愿有一些干净的钩子,每次通话都会触发,就像我对部分回发一样。但是我无法找到一个 - 或者就此而言,在.asmx webservice生命周期中找到任何文档。
在调用.asmx webservice期间是否引发了任何客户端事件?
有关我可以了解它们的指示吗?
答案 0 :(得分:0)
检查http://msdn.microsoft.com/en-us/library/system.web.services.webservice.aspx。只有一个事件,Disposed。
原来的问题。你不应该依赖元刷新。此外,UpdatePanels会在服务器上触发Page_Load和其他事件(不是每次事件都像完全回发时那样),所以我认为你在尝试使用WebServices时没有解决实际问题。