2013-07-21 70 views
0

爲什麼不能正常工作? IIS後20分鐘定期爲自己做網絡請求以防止IIS終止應用程序

protected void Application_Start() 
    { 
     Task.Factory.StartNew(() => DaemonStuff()); 
    } 

    private void DaemonStuff() 
    { 
     // Ping to self 
     MyWebRequest selfRequest = new MyWebRequest(MyURL, "GET"); 
     selfRequest.GetResponse(); 

     // Sleep 
     Thread.Sleep(1000 * 60 * 5); 

    } 

反正殺死我的應用我在這裏做訪問是我自己的網站(用WebRequest的)每5分鐘。

這樣,IIS不應該認爲我的網站閒置,因爲它獲取訪問,但它殺死了應用程序。

因此:是否有可能每5分鐘假冒一次我自己的網站,以免它被殺?

+0

我做了類似的事情(VB腳本),但我每60秒做一次。試試嗎? –

回答

0

問題是ASP.NET不知道使用計時器或任務生成的後臺線程上所做的工作。它只知道與請求相關的工作。 ASP.NET根本不知道你正在做的工作,這不會阻止IIS/ASP.NET關閉你的網站。

更強大的解決方案是使用IRegisteredObject作爲解釋here

最後,你確定MyURL是正確的嗎?檢查IIS日誌。

最後²,也許最好的解決方案是禁用IIS中的空閒超時:只需在池的高級設置中更改「空閒超時」即可。

+0

尊重你的第一段:由該計時器/任務所完成的工作是一次訪問......所以IIS或ASP.NET應該將此作爲一個普通的Web客戶端(如瀏覽器打開該站點)。也許IIS空閒超時不考慮「本地訪問」? – sports

0

您發佈的代碼實際上只需要調用DaemonStuff()一次。該方法然後睡覺並返回。你應該使用一個計時器或類似的東西來重複地調用它,除非我在你發佈的代碼中丟失了某些東西。

+0

是在示例中的代碼缺少一個無限循環或計時器... – sports