从服务器获取数据而不延长会话超时时间

8
有没有办法在ASP.net中从服务器获取数据而不延长会话超时时间?这需要每隔几分钟自动完成,直到页面关闭,并且不需要用户交互。我的Web应用程序的页面需要定期轮询服务器以检查特定条件(例如在30分钟内计划进行紧急维护)。当条件为真时,页面将向用户显示消息。当条件为假时,不需要采取任何措施。理解上来说,向服务器进行回发会重置会话过期时间。我们不希望每次页面轮询服务器时都延长/刷新/重置会话。我需要一种自动轮询服务器但不会重新设置会话超时的方法。谢谢。

也许我们需要更多的信息?你可以延长会话超时时间。 - Remy
1
AJAX调用Web服务时不应延长用户的会话。 - Refugee
2
@难民:是不应该还是不?请随意将您的评论发布为答案,因为它听起来可能是我正在寻找的答案! - Brian Beckett
我已经在下面回答了你的问题,并提出了一个实现你想要的效果的想法。 - Refugee
3个回答

5
如果你是在长时间的HTTP请求中提问,以防止HTTP超时,那么请查看web.config中的<httpRuntime executionTimeout="99999"></httpRuntime>,其中executionTimeout应该是以秒为单位的,详情请参见http://msdn.microsoft.com/en-us/library/e1f13641(v=vs.71).aspx
如果这真的只是会话超时问题,那么在长时间进程运行时,是否有可能在同一用户会话下异步ping服务器?
编辑:根据您的编辑,如果将“网站维护”Web服务分区为站点正常部分的会话状态范围之外的服务,则可以随意调用它。例如,如果您目前正在使用ASMX Web服务,则只需将其分区为一个单独的应用程序,例如作为应用程序的目录,以便它属于同一域。我想那应该可以很好地工作。
我不确定您目前正在调用哪种Web服务类型(ASMX、WCF等),甚至不确定您当前调用的Web服务是否与ASPX应用程序页在同一应用程序中。

1

首先,如果一个查询超出了会话时间限制,那么这个查询就存在严重问题。我宁愿先修复查询。 但是,如果您仍想使用会话进行操作,可以尝试以下方法:

您可以在应用程序中拥有一个Dummy.aspx,然后让图像元素在每15分钟刷新其URL。

<img id="dummyImage" src="/Dummy.aspx" width=0 height=0/>

<script type="text/javascript">
    var dummyImage = document.getElementById("dummyImage");
    setInterval(function(){
        dummyImage.src = "Dummy.aspx?_tmp=" + (Math.random() * 100000);
    }, 900000);
</script>

这样做可以避免对全局会话超时产生影响。


3
通过执行 dummyImage.src = "Dummy.aspx?....." 这段代码,浏览器将向该URL发出GET请求,同时包含sessionId cookie,从而重置会话超时时间。 - Mihai Caracostea

-2
使用一个JavaScript计时器来触发AJAX调用。因此,在您的PageLoad事件中,回显一个JavaScript setInterval(functiontocall(), timetowait);函数。您调用的方法将是对Web服务进行AJAX请求以执行查询。
这将一直调用自身,直到用户关闭页面。
从AJAX请求中不会刷新会话。

4
不幸的是,AJAX请求会刷新同一网络应用程序的会话。尽管如此,非常感谢您的帮助。 - Brian Beckett
2
AJAX请求与常规请求类似,但它们是异步的。这意味着它们也会包括会话ID cookie,将请求与会话绑定,从而重置超时时间。 - Mihai Caracostea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接