2010-08-02 70 views
2

在asp.net web服務中,我有一個靜態數據集,可在第一次訪問時加載數據(同步)。但是,當IIS回收應用程序池時,由於「集合已被修改;枚舉操作可能無法執行」,因此引發異常。IIS回收會導致靜態數據集訪問錯誤

回收將啓動新進程,這將創建新的靜態數據集,舊工作進程中的請求將不會訪問新的靜態數據集,集羣如何修改?或者這是可能的,舊的工作進程在請求結束前立即終止?

或者我明白回收過程錯了嗎? IIS不是啓動新的工作進程,而是在同一個工作進程中啓動新的AppDomain?新舊應用程序域共享相同的靜態數據集?

回答

1

事實證明,這個錯誤不是由回收過程造成的。在啓動過程中,同步過早地將數據集返回給稍後的請求/線程,而第一個請求/線程仍在填充它,導致「集合被修改」的異常。

就像往常一樣,我在找抽屜裏的鑰匙,我相信它應該在,而鑰匙完全放在抽屜的桌子上。有時候,我只是感到震驚,認爲這是頭腦而不是眼睛看到的。在這種情況下,在我發佈這個問題後,我意識到我看到的是錯誤的東西,只是因爲如果它是由回收過程引起的,我肯定有人應該已經發布了答案。

謝謝大家! Zhen