HTTP错误503。服务不可用。应用程序池在访问网站时停止。

209
有很多帖子讨论了这个问题,我已经尝试了很多方法,但都没有成功。我是一个Winforms开发人员,最近几天开始接触Web开发,因为我的公司正在进行Web方面的工作。
我有一个ASP.Net项目,想在本地IIS上托管它。在“项目属性->Web”设置中,我选择了“使用本地IIS服务器”,并给出了一个URL,如“localhost/MyApp”。我尝试在Firefox浏览器上访问它,但收到错误消息:“HTTP错误503. 服务不可用。”
以前我遇到了很多其他错误,但我一个一个地解决了它们。但却卡在了这里。以下是我的项目设置:
  1. 应用程序池设置为ASP.Net v4.0 Classic
  2. 应用程序池“启用32位应用程序”属性为true
  3. 应用程序池已启动
  4. 项目生成属性设置为目标框架的“Any CPU”
但我想提一下奇怪的行为。以下是我面临的情况。
  1. 应用程序池已启动
  2. 我尝试访问我的本地网站(通过给出URL:localhost/MyApp
  3. 我收到错误信息:HTTP Error 503. The service is unavailable
  4. 应用程序池已停止

我看了以下链接,并已经尝试过了。对于上述行为,我找到了这里。根据此链接,计算机名称不应该包含.。我的计算机名称中没有.,但是有-。此外,我的域名中包含.。此外,由于我的办公室笔记本电脑绑定了我们的域和计算机名称,因此我无法更改这些设置。

有谁能帮我理解发生了什么?请指导我。谢谢。

编辑

我在Global.asax中有以下代码。Application_BeginRequest方法在同一文件中为空。

protected override void Application_Start(object sender, EventArgs e)
{
    base.Application_Start(sender, e);
    String _path = String.Concat(System.AppDomain.CurrentDomain.RelativeSearchPath, ";",
                                         System.Environment.GetEnvironmentVariable("PATH"));
    System.Environment.SetEnvironmentVariable("PATH", _path, EnvironmentVariableTarget.Process);
    MyAppLog.Initialize();
    MyAppLog.WriteMessage("Application Started");
}

更新

根据评论中的建议,我能够从Cassini运行网站。


你的 Global.asax 中是否有在应用程序启动时运行的代码?是否有任何可能陷入循环的内容?你启用了“启用 32 位应用程序”,但你是否正在使用任何仅支持 32 位的 DLL? - CodingIntrigue
当您在Cassini中运行它时会发生什么? - Simon Whitehead
@RGraham:我的项目构建属性设置为“Any CPU”。所以我认为使用的dll不应该是问题。请查看Global.asax代码的编辑。谢谢。 - Sandy
@SimonWhitehead:不知道Cassini是什么。我现在从http://cassinidev.codeplex.com/下载了它。我可以在下载的文件中看到一些dll和exe文件。请问你能帮我如何使用它吗?与此同时,我会尝试从互联网来源上阅读相关问题。 - Sandy
@SimonWhitehead:我能够从Cassini运行网站。 - Sandy
请在IIS Web日志中检查子状态代码 http://support.microsoft.com/kb/943891 - an phu
30个回答

380
可能出现这种情况的一个原因是,IIS中的应用程序池被配置为在某个自定义帐户下运行,并且此帐户不存在或提供了错误的密码,或者密码已更改。查看IIS中应用程序池的高级属性,以确定它使用哪个帐户。
此外,事件日志可能包含有关为什么应用程序池在第一个请求上立即停止的更多信息。 输入图像描述

38
就我的情况而言,问题出在这里。我更改了Windows密码后,我的Windows 8.1本地IIS停止工作了。我必须在多个位置更新每个项目。在IIS 8中,我必须通过右键单击池并单击“高级设置->处理模型->标识”来更新应用程序池中的凭据。然后,我必须通过访问“站点->我的站点->高级设置->物理路径凭据”来更新站点本身。 - teynon
4
即使账户存在且密码正确,也有可能已被禁用;这将导致相同的症状。 - Wolfgang
2
是的,那就是解决方案。我的账户密码经常被更改。我忘记在“高级设置”中提供新密码了。 - mihkov
2
检查事件日志是解决问题的好方法,这在我遇到类似问题时总是有所帮助。上次我检查了事件日志,发现在IIS中加载rewrite.dll失败,于是我去控制面板中的程序和功能,修复了安装,一切都恢复正常了。 - Amr Elgarhy
3
我们最近更改了密码。这是解决方案。其他人请查看此处的截图:https://i.imgur.com/rp8bnGy.png - AskYous
显示剩余5条评论

62

好的,针对一个特定情况,我有另一个解决方案:如果您使用的是WINDOWS 10,并且最近更新了它(带有周年纪念版更新包),则需要按照以下步骤进行操作:

  1. 检查你的 Windows事件查看器——按Win+R键,然后键入:eventvwr,然后按ENTER。
  2. 在左侧的Windows事件查看器中单击Windows日志应用程序
  3. 现在你需要在中间窗口找到一些关于源为IIS-W3SVC-WP的错误。
  4. 可能会看到如下消息:

模块DLL >>path-to-DLL<<无法加载。数据是错误。

  1. 您需要转到控制面板程序和功能,并根据无法加载的dll修复另一个模块:
    • 对于rewrite.dll——找到IIS URL Rewrite Module 2,点击更改修复
    • 对于aspnetcore.dll——找到Microsoft .NET Core 1.0.0 - VS 2015工具...,然后点击更改修复
  2. 重新启动你的计算机。

这个答案帮助我解决了一个类似的问题。“服务不可用”错误通过移除Core 2.2(仅修复无法解决)得以解决。点赞。 - Yogi
1
很好的答案,日志向我显示模块 DLL C:\Windows\System32\inetsrv\compdyn.dll 加载失败。数据是错误的。因此我安装了动态内容压缩。 - Mehdi Daustany
对我来说,出现了以下错误:模块 DLL C:\Windows\System32\inetsrv\iis_ssi.dll 无法加载。数据是错误。 因此,我按照这个建议安装了 Select Server Side Includes。 - David Refoua
被接受的答案对我也没有帮助,但是这个答案却有用,不过我只是卸载了IIS URL Rewrite Module 2,然后它就起作用了……我没有修复或重新安装它。 - Hammy

16

我的情况是登录密码已更改,但应用程序池仍在使用旧密码。只需点击您的应用程序池的“高级设置”并重置您的“标识”即可。


我同意这种情况经常发生。 - Sandy

12

我曾经遇到同样的问题,通过查看事件日志进行了调试。首先,它说:“无法找到来源为Microsoft-Windows-WAS的Event ID 5059的描述”。

然后我使用打开或关闭Windows功能打开了WAS。然后在事件查看器中看到了这个信息“无法找到Microsoft-Windows-DistributedCOM”。

最后我放弃了,并删除了应用程序池(当访问网站时停止),并按原样重新创建它。这解决了问题。


如果你碰巧有一堆引用相同的应用程序池的网站,你可以使用appcmd来进行批量更新appcmd list site /xml | appcmd set site /[path='/'].applicationPool:YOURNEWPOOL /in - drzaus
对我也起作用了。通过从2008升级到2012,应用程序池并不完全满意。 - Anthony Horne

10

大多数情况下,这是由于AppPool设置引起的。

请执行以下步骤以解决此问题

  1. 检查AppPool服务是否正在运行。
  2. 检查AppPool的身份标识。
  3. 如果已更改该身份标识的密码,请输入新密码。

以下图片显示了在IIS中进行这些设置的方法:

输入图像描述


7
如果您正在使用Windows 10并更新到周年更新,请检查此链接以获取帮助。该链接可以解决IIS应用程序池崩溃和状态503的问题:https://orcharddojo.net/blog/troubleshooting-iis-apppool-crashes-status-503-after-windows-10-anniversary-update。如果链接失效了,您可以通过检查事件日志中显示的aspnetcore.dll、rewrite.dll等文件是否缺失来修复问题。以下是我们目前遇到的两个特定问题及其解决方法,但您可能会遇到完全不同的问题:
"C:\WINDOWS\system32\inetsrv\rewrite.dll" (reference)
    Go to "Programs and Features" (Win+X, F) and repair "IIS URL Rewrite Module 2".
"C:\WINDOWS\system32\inetsrv\aspnetcore.dll" (reference)
    Go to "Programs and Features" (Win+X, F) and repair "Microsoft .NET Core 1.0.0 - VS 2015 Tooling ...".

6
如果您使用的是 McAfee HIPS,并且在事件查看器应用程序日志中看到以下错误:
“模块 DLL C:\Windows\System32\inetsrv\HipIISEngineStub.dll 无法加载。 数据是错误。”
则在我的情况下,以下操作解决了此问题: https://kc.mcafee.com/corporate/index?page=content&id=KB72677&actp=LIST 页面上的引用:
  1. 点击开始,运行,输入explorer并点击确定。
  2. 导航到:%windir%\system32\inetsrv\config
  3. 以管理员身份在记事本中打开应用程序Host.config文件进行编辑。
  4. 编辑<globalModules>部分并删除以下行:
    <add name="MfeEngine" image="%windir%\System32\inetsrv\HipIISEngineStub.dll" />

  5. 编辑<modules>部分并删除以下行:
    <add name="MfeEngine" />

  6. 完成对applicationHost.config文件的编辑后,请保存该文件,然后使用iisreset或重新启动系统来重新启动IIS服务器。

6

在我的情况下,我检查了事件日志并发现错误是Cannot read configuration file ' trying to read configuration data from file '\\?\', line number '0'。数据字段包含错误代码。

错误代码是2307。

我删除了C:\inetpub\temp\appPools中的所有文件,并重新启动了iis。问题得到解决。


5

当我第一次添加服务并为其创建应用程序池时,我从命令提示符中执行了“iisreset”,然后它起作用了。


5

我曾经遇到过类似的问题,解决方法是将我的用户添加到“本地安全策略”>“本地策略”>“用户权限分配”下的“作为批处理作业登录”的策略中。


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