HTTP错误503。在简单的ASP.NET 4.0网站下,服务不可用。

36

我的本地笔记本电脑出现了奇怪的情况:我长时间以来在本地工作的网站没有启动...

为了定位问题,我创建了一个只有 'index.html' 文件的简单网站。它在 ASP.NET 2.0 下运行良好,但当我将 App Pool 切换到使用 4.0 后,它停止了工作。

当我在浏览器中打开网站时,显示以下错误:

服务不可用

HTTP 错误 503。该服务不可用。

并导致 App pool 停止工作... 在“应用程序”部分的系统事件日志中,我有以下信息:

工作进程未能正确初始化,因此无法启动。数据是错误的。

请建议。在 Google 中找不到任何相关信息... :(

P.S. 我有 VS2010,Windows Vista x64,已安装最新更新,也安装了 VS SP1...


好的提示(应该自己做)。工作进程未能正确初始化,因此无法启动。数据是错误的。 - Budda
1
配置?你是指web.config文件吗?但是它不存在:我已经在只有一个index.html文件的网站上尝试过了...如果你指的是其他东西,请给予建议。我在配置领域不是太强。非常感谢您的帮助。 - Budda
我的意思是 .NET 配置。应用程序池及其配置似乎出了问题!当我尝试在 Windows 7 x64 上安装 .NET FW v1.1 时,我遇到了类似的问题。应用程序池拒绝启动。因此,我不得不修复 .NET FW 4.0 并将所有内容重置为默认设置,以使一切重新正常工作。 - Numan
9个回答

58

我必须启动为我的网站设置的应用程序池,因为它在某个错误上自动停止了。(IIS(我的情况下为7.5) -> 应用程序池 -> 启动已停止的应用程序池。)


2
这真的很有帮助。我想知道特定的错误(如果有)实际上在哪里记录,例如“应用程序池不可用”。 - Carlos P
1
如果应用程序池启动后立即停止,则您的应用程序池可能也具有过期的帐户密码。打开应用程序池属性并重新输入身份验证信息。 - Dustin_00
谢谢!在我的情况下,主网站内还有一个应用程序文件夹,它使用了一个已停止的特定应用程序池!所以我一直只看着主网站的应用程序池...直到现在!!太好了! - lmoglia

4
我已重新安装了.NET 64位,这有所帮助。
附注:
看起来像是“C:/windows/Microsoft.net/Framework64/v4.0.30319/”文件夹中的某些文件或我自己删除了它们(VS有时会对“ASP.NET临时文件”中的文件进行投诉,而它们的删除有所帮助)...可能我没有注意到那些文件夹不是临时的...
再附注:
在这种情况下,为什么VS会抱怨“C:/windows/Microsoft.net/Framework64/v4.0.30319/”文件夹中的文件...好吧,现在很难说。

1
请注意,在从FW 4.0文件夹重新安装/修复后,您可能需要重新运行aspnet_regiis。 - Numan
我已经尝试在重新安装.NET 4.0之前重新运行aspnet_regiis - 没有帮助。 - Budda
当我卸载.NET 4.5.1时,Framework64\v4.0.30319几乎是空的。 - sisve

3
听起来你忘了在IIS上启用.NET 4扩展。尝试在ISAPI和CGI限制中找到并启用它。

http://blogs.msdn.com/b/rakkimk/archive/2007/08/17/iis7-where-is-the-web-services-extensions-option-which-was-there-in-iis6.aspx

根据评论,可能是框架的某个部分被删除了,这种情况下,最好先清理掉 Framework 4 再重新安装。尝试查看此博客文章,其中提到了一个自动化清理过程的工具 http://blogs.msdn.com/b/astebner/archive/2008/08/28/8904493.aspx


那个网站运行了几年...但今天崩溃了...我记得VS抱怨说,“C:/windows/Microsoft.net/Framework64/v4.0.30319/”文件夹里有问题(它经常抱怨“ASP.NET临时文件”子文件夹中的文件)...现在我在想,可能我从那个文件夹中删除了一些东西...? - Budda
你可以尝试重新安装 .NET 4。 - Stanislav Ageev
没有清理,重新安装.NET 4.0有帮助。请查看我的回答。谢谢你的帮助! - Budda

2

ASP.NET 2.0和4.0在应用程序启动方面有微妙的变化。例如,在ASP.NET 4.0中,您可能无法在Application_Start事件期间访问HttpContext对象。您是否有可能因此隐藏了异常抛出的代码?

可能会导致AppPool停止的问题有几个。我自己遇到的一个问题是,除请求工作线程以外的线程上发生的任何未处理异常都将最终导致AppPool停止。这不是立即的问题,但最终它会停止。 ASP.NET运行时会跟踪您的应用程序失败频率,并且如果超过阈值,则停止AppPool,从而带下与其共享该池的任何应用程序。 StackOverflowException或OutOfMemoryException最终会产生相同的效果,这些都是关键错误,不应在您的日常生产代码中发生。

我建议查看ASP.NET 2.0和4.0之间的更改,并查找未处理的异常。您还可以更改Visual Studio处理异常的方式(在Debug> Exceptions下检查),并在抛出异常时中断,无论它们是否已处理,这是一种快速但非常详细的查找任何异常的方法。


正如我在原帖中提到的,我尝试使用简单的index.html文件(里面没有代码,只有最简单的HTML)进行测试:这个文件的网站可以在.NET 2.0下运行,在切换到4.0后就会失败... :( - Budda
好的,进入Visual Studio,在主菜单中输入Debug > Exceptions,点击“Common Language Runtime Exceptions”条目旁边的复选框“Thrown”。现在运行您的应用程序。Visual Studio应该在任何异常的第一眼就会停止。如果您需要超越您的代码,您还可以从Visual Studio的调试器设置中禁用“Just my code”。这将允许您发现任何异常,无论它们从哪里抛出。 - John Leidegren
具体一点并询问是没有坏处的,你知道吗?你尝试过调试所有异常,甚至是非用户代码异常吗?我认为如果你这样做了,你会惊讶于你所发现的。 - John Leidegren
在这种情况下,asp.net应用程序根本没有被调用。 - Budda
此时考虑重新安装所有内容是一个选项,因为我们遇到这些问题的程度已经很高了。这似乎也解决了你的问题。 - John Leidegren
显示剩余4条评论

2
我建议检查用作网站根目录的文件夹的安全权限。工作进程的启动可能会失败,因为它无法读取此文件夹中的web.config
如果您在IIS管理器中创建新应用程序,默认情况下它将创建一个同名的新应用程序池。问题是该池运行在名为IIS APPPOOL\yourSiteName的新身份下(在应用程序池页面上,这被通用地列为ApplicationPoolIdentity)。
此身份在池创建之前不存在,因此该文件夹当前未授予读取访问权限,然后工作进程失败,因为它没有访问权限。
如果您希望使用此身份,可以使用网站上下文菜单中的编辑权限项并访问安全选项卡,直接通过资源管理器编辑文件夹的Security项目,或者使用命令行工具(建议使用icacls.exe)。
您还可以将池的身份更改为Network Service或特定用户。我强烈不建议使用Local System,因为它授予了太多权限,而Local Service则有其他限制。
注意:如果要在安全对话框中添加ApplicationPoolIdentity,则如果使用高级/查找选项,IIS APPPOOL帐户不会出现。您必须手动输入整个“IIS APPPOOL\yourSiteName”字符串,然后单击检查名称按钮进行验证-如果它有效,则对话框将用下划线标记替换您的文本,并仅显示yourAppName

1

进入IIS,将您的Web应用程序的应用程序池更改为DefaultAppPool


0
我认为在这种情况下,如果您进入IIS下的应用程序池,找到您正在运行网站的应用程序池。我确定它已经停止了,所以只需重新启动它,您就可以继续工作了。

0

我的唯一问题是应用程序池,它显示了停止的图标。 我将我的应用程序指向另一个应用程序池,现在它又可以工作了。希望这能帮到你。


0

我必须更新我的网络凭据,但没有更新IIS下应用程序的“PhysicalPathCredential”。问题已解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接