2012-09-12 45 views
1

我認爲我的計時器在一段時間後停止工作,我剛剛測量了20分鐘,並發現了其他任何導致停止的事情。如果垃圾被收集起來,我應該如何聲明它,以便它不是?定時器在webservice中20分鐘後停止工作

[WebMethod, SoapHeader("spAuthenticationHeader")] 
public void startStreaming() 
{ 
    if (Globals._streamTimer == null) 
     Globals._streamTimer = new System.Threading.Timer(handleStream, null, 0, 30000); 
     return Globals._returnValue; 
} 


public static class Globals 
{ 
    public static System.Threading.Timer _streamTimer = null; 
} 
+0

什麼會話時間設置爲在服務器上? – BugFinder

+1

IIS在應用程序池(高級設置)上有一個默認爲20分鐘的空閒超時設置...巧合? – BlueChippy

回答

4

看看你的IIS設置--20分鐘?

Web應用程序不應該長時間運行。無論你在做什麼,你都應該以不同的方式做。也許一個Windows服務,或持久性存儲和輪詢...

或者,你可以把它整理並增加超時值。

IIS Idle Time-out

+0

不知道。將超時設置爲0並讓它「永遠」運行有什麼危險嗎? – mdc

+1

是的。您可以耗盡ASP.NET線程池中的可用線程。創建線程來爲請求提供服務,然後永遠運行。如果你有內存泄漏或分配對象,內存永遠不會被釋放。如果應用程序崩潰,進程永遠不會被終止。這是一個很糟糕的模型,你正在建設。考慮一個不同的模型。不知道你在做什麼,因爲沒有人會等待30分鐘的網絡響應。很可能,你想要一個Web請求來稍後觸發。這可能會正確處理Windows服務或其他設計。 –

+0

感謝您的回答。我看着它。 – mdc

相關問題