2011-07-06 149 views
2

在我的ASP.NET應用程序中,我有一個腳本,我會定期自動調用以更新數據庫。由於這段代碼中的一個錯誤,它的幾次調用都進入了一個無限循環。殺死ASP.NET線程

我在一個共享主機,所以我不能只是重新啓動IIS。我曾嘗試從主機的管理網站「停止」該網站,但沒有任何效果。

由於它們現在運行了很長時間,我假設沒有配置超時。所以,我想殺死那些「流程」(我認爲它實際上只是線程),有沒有辦法做到這一點,而不與我的託管公司聯繫?

+0

在這一點上,我認爲唯一的辦法是重新啓動應用程序池。如果你有權訪問這個。 –

+0

你提到他們仍在運行,所以我認爲你知道這一點,因爲他們仍然在進行數據庫調用?它取決於代碼,但是您可能會通過終止它們與數據庫的連接而導致異常,從而導致線程終止? (完全取決於你的異常處理和當然連接的維護方式)。如果線程打開和關閉連接太快而無法終止它們,請嘗試鎖定它們需要的表並強制執行Sql Timeout?即BEGIN TRAN,SELECT * FROM TableThreadsAreUsing(記住這會鎖定每個人) – Smudge202

+0

無限循環?不,託管公司將禁止你佔用CPU時間 – user774411

回答

0

我從我想殺死的線程中記錄一些信息到一個文件。代碼能夠創建該文件,如果它不存在,但它不適用於它所在的文件夾。

因此,我暫時將文件夾重命名爲日誌,線程似乎已停止。

0

您是否嘗試過停止該網站的應用程序池?

+0

我該怎麼做? – svick

+0

取決於IIS版本.. http://help.webcontrolcenter.com/KB/a1114/how-to-enable-a-32-bit-application-pool-in-iis7-dedicatedvps.aspx(只顯示在哪裏應用程序池) – Sergio

1

更新web.config將停止您的應用程序。假設你可以訪問網站的文件。

+0

更改web.config將啓動一個新的AppDomain。之前的AppDomain AFAIK將保留在後臺,直到執行完成(通過這種方式進行部署而不會干擾實時網站,以前的AppDomain應該足夠長的時間來處理現有的請求)。舊的AppDomain是否會考慮長時間運行的任務原因,以便繼續使用之前的AppDomain? – Smudge202

+0

這樣做似乎沒有效果。 – svick