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个回答

5
我曾遇到这个错误,在我这种情况下,原因是我一段时间前修改了用户密码,并且在重新启动应用程序池之前没有出现503错误。所以,我通过在“应用程序池/高级设置/身份/.../设置.../密码/确认密码”中设置新密码来修复它。

4

除了微软的“周年更新”问题之外(感谢微软),如果你缺少的文件是,即你的<事件查看器>有

The Module DLL C:\WINDOWS\System32\inetsrv\cgi.dll failed to load.  The data is the error.

然后解决此问题的方法是:
  1. 进入 IIS 管理器
  2. 选择 连接 面板中的最上面一行 (通常是您的计算机名称)
  3. 在右侧面板的底部,管理 下面应该有 Web 平台安装程序
  4. 加载后,选择 产品
  5. 在搜索框中输入 cgi,然后按下 <Enter>
  6. 选择 IIS:CGI,然后单击右侧的 添加,最后在底部单击 安装
  7. 安装完成后,应该强制您重新启动计算机,然后问题就解决了。

2
我的问题是“Url Rewrite”,我卸载了它,然后重新安装。因为我遇到了这个错误:“模块DLL C:\WINDOWS\system32\inetsrv\rewrite.dll无法加载。数据是错误。” - Gwasshoppa
我想知道为什么需要CGI。我猜我得深入了解一下。我从我的配置中排除了它,因为我想加强我的IIS。 - Timothy C. Quinn
这对我也起作用了,但首先我必须实际安装Web平台安装程序,它位于面板的右侧,在那之后,“Web平台安装程序”出现在您所说的位置。 - Harrison Boles

4
如果您能在Visual Studio调试器中运行网站,那么可能可以看到应用程序池在代码的哪个位置崩溃。在我的情况下,是由于一个函数被无限次递归调用导致了堆栈溢出。请注意:Windows事件日志和IIS日志对于诊断问题没有帮助。

4

我遇到了与iis 8.5相同的问题。在Windows日志——>应用程序下搜索事件查看器后,我意识到我在位于“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config”路径下的 .net框架的machine.config文件上遇到了权限错误。给予IIS_IUSRS用户读取这个文件的权限解决了我的问题(右键点击文件——>属性——>安全——>编辑——>添加——>IIS_IUSRS)。


4
为了解决问题,请按照以下步骤操作,因为我也遇到过相同的问题,下面的解决方案对我有效:
1. 给予 IIS_IUSRS 用户 "C:\inetpub\temp" 文件夹完全控制权限或至少读取访问权限。
2. 同样检查 IIS_IUSRS 用户是否具有 "C:\inetpub\wwwroot" 文件夹的相同权限。
希望这个解决方案能够解决你的问题!

3
除了在Orhan的回答中提到的步骤之外,您可能还需要通过进入IIS管理器>服务器根目录>模块>配置本机模块来额外删除原生模块。选择MfeEngine,然后选择删除。

3
我遇到了类似的问题,每当向我的应用程序池发出Web请求时,所有应用程序池都会停止。尽管我在事件查看器中收到以下错误:
“应用程序池'appPoolName'的工作进程遇到错误'配置文件不是格式正确的XML',尝试从文件'\?\C:\inetpub\temp\apppools\appPoolName\ appPoolName.config',行号'3' 读取配置数据。 数据字段包含错误代码。”
这告诉我,在以下应用程序配置中存在错误:
“C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config”
在我的情况下,我编辑了web.config并插入了一个IIS不喜欢的元素进行部署,applicationHost.config刮掉了web.config并插入了这个错误元素,直到我手动删除它才能解决问题。

你提到的那个特定元素是IIS明显不喜欢的元素是什么? - Akhil
我在4年前发布了这篇文章。我不确定web.config中有哪个元素,但这不是重点。OP描述的应用程序池问题也发生在我身上,我得到了这些无用的错误消息。以上问题的原因是我在站点的web.config中放入了一个不正确的条目(可能存在拼写错误、语法错误或IIS未能识别为有效的部分)。 - ShaneC

3

将 "托管管道模式" 从 "经典" 更改为 "集成" 对我有用。 可以在应用程序池的 "基本设置" 中更改。


这解决了我的问题,该问题出现在应用以下Windows KB到我们的Windows Server 2008 R2上运行的IIS 7.5之后。

2019-07年.NET Framework 3.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7、4.7.1、4.7.2、4.8的安全和质量汇总适用于Windows 7和Server 2008 R2 x64(KB4507420)更多信息: http://support.microsoft.com/kb/4507420

- phanf

3

虽然我来晚了,但是对我有效的解决方案并没有列出。

对我而言,解决方案就是在IIS中删除网站和应用程序池,然后重新创建它们。

这是因为最初我先创建了站点/文件夹,然后安装了dotnet core运行时。由于某种原因,这导致站点无法启动。

重新创建后,站点成功运行,不需要使用其他建议。


1
很遗憾,对于一个.NET 7 ASP.NET Core Web API项目来说,这也是唯一对我有帮助的方法。谢谢你的建议!♥️ - undefined

2

这种情况可能是由于服务器机器上的磁盘空间不足导致的。您可以在事件查看器中找到更多信息。 如果发生这样的事情,只需停止IIS,清理一些免费的磁盘空间,然后重新启动IIS并启动App Poll。enter image description here


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