asp.net 如何防止共享主机上IIS应用程序池中的空闲超时

omhiaaxx  于 2023-02-26  发布在  .NET
关注(0)|答案(3)|浏览(154)

我在一个共享主机(godaddyplesk windows服务器)上上传了我的ASP.NET应用程序。共享主机上的空闲超时设置为5分钟,并且不能更改。

我听说会话计时器可以通过在超时时间过去之前ping服务器来重置,我正在尝试这样做,但我的代码似乎不起作用。我将此作为指导方针:
1.保持ASP.NET会话打开/存活(Maryan的帖子)和

  1. https://gist.github.com/KyleMit/aa4f576fa32bf36fbedab5540c18211d
    基本上在我的家庭控制器,我把这个代码:
[HttpPost]
 public JsonResult KeepSessionAlive()
 {
     return new JsonResult {Data = "Success"};
 }

在我的脚本文件夹中,我将此脚本命名为SessionUpdater.js

SessionUpdater = (function () {
var clientMovedSinceLastTimeout = true; //I want it to be always on so if statement fires
var keepSessionAliveUrl = null;
var timeout = 1 * 1000 * 60; // 1 minutes

function setupSessionUpdater(actionUrl) {
    // store local value
    keepSessionAliveUrl = actionUrl;
    // setup handlers
    listenForChanges();
    // start timeout - it'll run after n minutes
    checkToKeepSessionAlive();
}

function listenForChanges() {
    $("body").one("mousemove keydown", function () {
        clientMovedSinceLastTimeout = true;
    });
}
// fires every n minutes - if there's been movement ping server and restart timer
function checkToKeepSessionAlive() {
    setTimeout(function () { keepSessionAlive(); }, timeout);
}

function keepSessionAlive() {
    // if we've had any movement since last run, ping the server
    if (clientMovedSinceLastTimeout == true) {
        $.ajax({
            type: "POST",
            url: keepSessionAliveUrl,
            success: function (data) {
                // reset movement flag
                clientMovedSinceLastTimeout = true; //always on
                // start listening for changes again
                listenForChanges();
                // restart timeout to check again in n minutes
                checkToKeepSessionAlive();

            },
            error: function (data) {
                console.log("Error posting to " & keepSessionAliveUrl);
            }
        });
    }
}

// export setup method
return {
    Setup: setupSessionUpdater
};
 })();

然后在我的布局页面和主页\索引页面(以防部分视图由于某种原因无法工作)中,我放置了以下引用:

<script type="text/javascript">
// initialize Session Updater on page
SetupSessionUpdater('/Home/KeepSessionAlive');
SessionUpdater.Setup('@Url.Action("KeepSessionAlive","Home")');
 </script>

我的问题是,尽管这样做了,会话仍然每5分钟注销我一次,我可以告诉应用程序池回收,因为网站需要永远重新启动。我做错了什么?我如何才能让它停止注销我。
任何信息或被指向正确的方向是赞赏的。

70gysomp

70gysomp1#

我知道这个问题是问了一段时间前,但我想这可能是有帮助的人在未来。
我刚刚花了一整天的时间试图解决这个问题,直到我遇到了this article
作者基本上创建了一个方法,你可以把它放在全局.asax文件的Application_Start方法中,这个方法每60秒上传一个空字符串到你的站点(如果你愿意,你可以改变秒数),以避免在5分钟后出现空闲超时。
不幸的是,没有办法改变godaddy plesk服务器上的IIS设置。

67up9zun

67up9zun2#

作为一种替代方案,您可以使用外部运行时间监控服务,通过GET请求持续查询您的网站,这也将使其保持活动状态。大多数运行时间监控器实际上并不发送请求,但Application Insights中的可用性功能可以做到这一点,并且非常适合。

n53p2ov0

n53p2ov03#

这个问题可以通过在布局页面中插入一个javascript函数来解决,该函数每隔x秒ping服务器一次。
在布局中添加了这个(是的,它杂乱无章,我从来没有回去检查哪个工作):

<script type="text/javascript" src="/scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/SessionUpdater.js"></script>

<script type="text/javascript">

    // initialize Session Updater on page

    SetupSessionUpdater('/Home/KeepSessionAlive');

    SessionUpdater.Setup('@Url.Action("KeepSessionAlive","Home")');

</script>

<script type="text/javascript">

    function keepAliveFunc() {

        setTimeout("keepAlive()", 10000);

    };

    function keepAlive() {

        $.post("/Home/KeepAlive", null, function () { keepAliveFunc(); });

    };
    $(keepAliveFunc());

</script>

它引用了这个脚本~/Scripts/SessionUpdater.js:

var keepSessionAlive = false;

var keepSessionAliveUrl = null;


function SetupSessionUpdater(actionUrl) {

    keepSessionAliveUrl = actionUrl;

    var container = $("#body");

    container.mousemove(function () { keepSessionAlive = true; });

    container.keydown(function () { keepSessionAlive = true; });

    CheckToKeepSessionAlive();

}


function CheckToKeepSessionAlive() {

    setTimeout("KeepSessionAlive()", 200000);

}


function KeepSessionAlive() {

    if (keepSessionAlive && keepSessionAliveUrl != null) {

        $.ajax({

            type: "POST",

            url: keepSessionAliveUrl,

            success: function () { keepSessionAlive = false; }

        });

    }

    CheckToKeepSessionAlive();

}

相关问题