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

2
在设置一个全新的经典ASP网站时,我们在Windows Server 2019上遇到了这样的503错误。实际上,在应用程序池中,将“.NET CLR版本”设置为“无托管代码”,导致应用程序池在启动后2秒钟停止,从而在Windows事件日志中生成WAS 5002和5021错误。解决方案是即使没有使用.NET,也要放置“v4.0”。请注意保留HTML标签。

1
在我的情况下,网站显示“503服务不可用”,应用程序事件日志显示“...\aspnetcorev2.dll无法加载。数据是错误。”这仅发生在启用了“IIS设置”启用32位应用程序的IIS站点上。系统停止了这些站点的应用程序池,这就是在尝试检索站点时生成“503服务不可用”消息的原因。
事实证明,在此应用程序事件日志中指定的路径甚至不存在。尝试修复系统上安装的两个“Microsoft.NET Core SDK 2.1.50x”版本并未解决问题,安装微软似乎唯一可用的最新版本aspnetcorev2.dll也没有解决问题,卸载这些SDK也没有解决问题。
注意:微软甚至似乎已经不再提供我系统上安装的原始v2 ASP.NET Core版本的安装程序了。
“成功的做法: 由于我在这个系统上没有任何ASP.NET Core网站,所以对我起作用的解决方案是从我的系统中卸载所有相关的DLL,并通过注释掉它们来从IIS applicationhost.config文件中删除它们(参见aspnetcore.dll failed to loadIIS 7、7.5、8、8.5和IIS 10中的applicationhost.config文件路径)。如果您使用较新版本的ASP.NET Core,我认为您同样可以更新applicationhost.config中的引用[我还没有尝试过]。”

1

在我的情况下,由于我在本地创建了一个错误日志文件夹,而该文件夹在服务器上不存在,因此此应用程序池会自动停止。检查web.config文件中是否添加了任何在服务器上存在的关键路径。


0

将文件夹"C:\inetpub"的完全权限授予我


0
在我的情况下,错误消息显示在Windows事件查看器 -> Windows日志 -> 应用程序中:“模块DLL C:\Windows\system32\inetsrv\rewrite.dll无法加载。数据是错误。” 通过安装程序卸载重写模块解决了问题。我没有使用任何重写规则,因此我卸载了重写模块。重新安装该模块可能也有助于解决问题。

0

我在运行 Windows 2008 R2 的一些旧服务器上遇到了这个问题。32位应用程序会使应用程序池崩溃并返回503状态码,而不会触发应用程序代码。问题似乎与 .net core 模块有关,该模块错误地尝试加载64位版本的模块,即使所涉及的32位应用程序不是 .net core 应用程序。

看起来 IIS 仍然会加载模块,以确定要加载哪个模块来服务请求,而尝试将64位版本加载到32位进程中是不好的。

最终,我不得不从服务器卸载所有版本的 .net core,并重新安装最新的版本(此时为3.1.15-我们尚未使用5)。之后,我的32位应用程序和 .net core 应用程序可以共存于同一台服务器上。

这篇博客帖子帮助我解决了这个问题,经过多天的头痛。希望它对有人有所帮助。 解决方案的博客文章


0

这个答案能帮到你吗?
如果你在 EventViewer 收到以下信息:

模块 DLL aspnetcorev2.dll 加载失败。数据是错误的。

那么,是的,这将解决你的问题。


检查事件查看器

  1. 按下Win+R,输入:eventvwr,然后按ENTER键。
  2. Windows事件查看器的左侧单击Windows日志 -> 应用程序
  3. 现在您需要在中间窗口找到一些源为IIS-W3SVC-WP的错误。

如果您收到了先前的错误消息,则解决方法是:

安装 Microsoft Visual C++ 2015 可再发行组件 86x 和 64X(两者都要安装)

来源


0

检查写入到[event viewer\Windows Logs\System]节点的日志。 源是'WAS'。

enter image description here


0
在我的情况下,Environment.Exit(0)命令导致了问题。 它可能会帮助到某些人所以分享一下。

0
如果您在公司工作,可能更改了Active Directory密码(您的域帐户密码)是出现此问题的原因。公司要求您定期更改AD密码。为解决此问题,仅需更新应用程序池和网站身份的密码即可。

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