2009-09-10 61 views
0

我有一個使用.NET框架1.1版的asp.net網站。偶爾,該網站將以對象空錯誤開始崩潰,並出現一個報告.NET版本爲2.0的錯誤屏幕。如果我回收站點應用程序池,則該站點將恢復正常運行,直到它在一兩週後再次崩潰。如果我手動將.NET版本更改爲2.0,那麼我會得到相同的對象空錯誤。ASP.NET網站間歇性地加載錯誤的框架版本

有沒有人看到過這樣的問題,或知道如何解決它?

+2

是您的應用程序池由多個應用程序共享? – 2009-09-10 20:27:19

+0

不,不再。最初,我有一個用於多個1.x應用程序的AppPool,但是一旦發生此問題,它也會導致所有其他應用程序崩潰。我將崩潰的應用移至自己的AppPool中以隔離它。 – Joe 2009-09-10 20:30:50

回答

1

嗯 - 斯科特Hanselman的過類似這樣的問題 - 事實證明,要求非應用程序在IIS中超時並被卸載後創建的.NET資源可能導致它以2.0模式啓動。

添加<supportedRuntime> element到web.config解決了這個問題:

<configuration> 
    <startup> 
    <supportedRuntime version="v1.1.4322"/> 
    </startup> 
</configuration> 
+0

這聽起來不錯,我會嘗試。 – Joe 2009-09-10 22:05:44

0

就像Andrew Hare在評論中所說,您的應用程序池可能會被2.0應用程序共享。另一個選擇是你在web.config中有一個2.0 dll的引用,並且該應用剛剛崩潰。

0

受Andrew質疑,您可能在共享應用程序池但在不同版本的框架上運行的獨立程序之間發生衝突。

應用程序池本身沒有要運行的編譯器/ .net框架版本的設置。這是通過應用程序池中運行的應用程序的編譯器選項卡設置的,每個池中只能運行一個框架。

如果這是你的情況,那麼所有關於時間...。由於應用程序池本身並不驅動它們使用的框架,因此應用程序可以。啓動應用程序池的第一個應用程序將設置整個池將運行於.net框架下的內容,因爲池只能運行一個框架。

如果池由2.0應用程序加載/啓動,那麼您的1.1將崩潰。然後您必須停止池,重新啓動,然後立即加載1.1應用程序,從而導致池使用1.1框架運行。

要解決此衝突,您可以創建單獨的應用程序池並將應用程序分配給池。

您還必須小心確保應用程序的編譯器選項卡設置正確和/或應用程序放置在正確的應用程序池中。

例如,我們有時會將其設置錯誤並造成嚴重破壞。檢查是否有任何1.1版本的應用程序,但IIS中的編譯器選項卡設置爲2.0。這肯定會導致問題,如果該應用程序是第一個加載池,並且可能不會導致該應用程序出現錯誤,如果1.1代碼全部與2.0框架兼容(至少從我的經驗來看,這絕對是可能的)。

或者,看看是否有其他的應用程序不小心投入與發生故障的應用程序池....

+0

我不認爲這是我的問題,因爲我只有一個應用程序池,但這是很好的建議,但如果我有聲望,我會投你一票。 – Joe 2009-09-10 22:21:29

+0

當你做名聲並給我一點時,回到這個名單。 :)我爲我們的團隊寫了一個小手冊,因爲我們有幾個1.1和2.0應用程序和應用程序池在我們的服務器上。 :) – klabranche 2009-09-10 22:36:04