2009-09-10 62 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