繁体   English   中英

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

[英]HTTP Error 503. The service is unavailable. App pool stops on accessing website

关于这个有很多帖子,我现在已经尝试了很多东西。 但无济于事。 我自己基本上是一个 Winforms 开发人员,几天前开始研究这个 Web 的东西,因为我的公司正在采取 Web 计划。

我有一个 ASP.Net 项目,我想将它托管在本地 IIS 上。在Project properties -> Web设置中,我选择了Use Local IIS Server并将 url 作为localhost/MyApp 我尝试在我的 firefox 浏览器上访问它并收到错误HTTP Error 503. The service is unavailable.

以前我有很多其他错误,我都一一修复了。 但是被这个击中了。 这些是我在项目中的设置

  1. 应用程序池设置为 ASP.Net v4.0 Classic
  2. 应用程序池Enable 32 bit Application属性为真
  3. 应用程序池已启动
  4. 项目构建属性设置为目标框架的Any CPU

但我想提一个奇怪的行为。 以下是我面临的事情

  1. 应用程序池已启动
  2. 我尝试访问我的本地网站(通过将 url 作为localhost/MyApp提供)
  3. 我收到错误HTTP Error 503. The service is unavailable
  4. 应用程序池已停止

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

任何人都可以帮助我了解发生了什么事吗? 请指导我。 谢谢。

编辑

我在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 运行该网站。

发生这种情况的一个可能原因是 IIS 中的应用程序池被配置为在某个自定义帐户下运行,而该帐户不存在或提供了错误的密码,或者密码已更改。 查看IIS中应用程序池的高级属性,它使用的是哪个帐户。

此外,事件日志可能包含有关应用程序池为何在第一次请求时立即停止的更多信息。

在此处输入图片说明

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

  1. 检查您的Windows Event Viewer - 按 Win+R 并键入: eventvwr ,然后按 ENTER。
  2. Windows Event Viewer的左侧,单击Windows Logs -> Application
  3. 现在您需要在中间窗口中找到源IIS-W3SVC-WP一些错误。
  4. 可能你会看到这样的消息:

模块 DLL >>path-to-DLL<< 加载失败。 数据是错误的。

  1. 您必须转到Control Panel -> Program and Features ,根据无法加载的 dll,您需要修复另一个模块:
    • 对于rewrite.dll - 找到IIS URL Rewrite Module 2并单击Change -> Repair
    • 对于aspnetcore.dll - 找到Microsoft .NET Core 1.0.0 - VS 2015 Tooling ...并点击Change -> Repair
  2. 重启你的电脑。

我的情况是我的登录密码改变了,而应用程序池仍然使用旧的。 因此,只需单击应用程序池的“高级设置”并重置您的“身份”。

我遇到了同样的问题,并使用事件日志对其进行了调试。 首先它说:“无法找到来自 Microsoft-Windows-WAS 源的事件 ID 5059 的描述”。

然后我使用turn windows features on/off打开 WAS。 然后我在 eventvwr “找不到 Microsoft-Windows-DistributedCOM”中看到了这一点。

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

大多数情况下,它是由于 AppPool 设置而发生的。

检查以下内容以解决此问题

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

以下图像显示了 IIS 中的这些设置

在此处输入图片说明

对于使用 Windows 10 并在将它们更新为周年更新后来到这里的任何人,请查看此链接,它对我有帮助:

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 ...".

如果您有 McAfee HIPS 并且在事件查看器应用程序日志中看到以下错误:

模块 DLL C:\\Windows\\System32\\inetsrv\\HipIISEngineStub.dll 加载失败。
数据是错误的。

然后以下解决了我的问题: https : //kc.mcafee.com/corporate/index?page=content&id=KB72677&actp=LIST

从页面引用:

  1. 单击开始,运行,键入资源管理器,然后单击确定。
  2. 导航到:%windir%\\system32\\inetsrv\\config
  3. 以管理员身份打开文件 applicationHost.config 以在记事本中进行编辑。
  4. 编辑 <globalModules> 部分并删除以下行:
    <add name="MfeEngine" image="%windir%\\System32\\inetsrv\\HipIISEngineStub.dll" />

  5. 编辑 <modules> 部分并删除以下行:
    <添加名称="MfeEngine" />

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

就我而言,我检查了事件日志,发现错误是无法读取配置文件 ' 试图从文件 '\\\\?\\' 中读取配置数据,行号 '0'。 数据字段包含错误代码。

错误代码是 2307。

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

我有一个类似的问题。 我通过将我的用户添加到“本地安全策略”>“本地策略”>“用户权限分配”下的“作为批处理作业登录”策略来解决它。

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

如果您可以在 Visual Studio 调试器中运行该网站,则可能能够看到应用程序池在您的代码中崩溃的位置。 就我而言,它是一个被无限次递归调用的函数,这导致了堆栈溢出。 注意:Windows 事件日志和 IIS 日志对诊断问题没有帮助。

我遇到了这个错误,在我的情况下,原因是前段时间我修改了用户密码,直到我重新启动应用程序池才出现 503 错误。

所以我修复了它在应用程序池/高级设置/身份/[...]/设置.../密码/确认密码上设置新密码

我在 iis 8.5 上遇到了同样的问题。 在windows Logs-->applications下搜索eventViewer后,我发现我对位于“C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319”的.net框架的machine.config文件有权限错误\\Config\\machine.config”。 给它一个权限 IIS_IUSRS 解决了我的问题(右键单击文件-->属性-->安全-->编辑-->添加-->IIS_IUSRS)

如果您缺少的文件是cgi.dll ,即添加到这些Anniversary Update问题(感谢微软),即您的Event Viewer

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

然后解决这个问题:

  1. 进入IIS Manager
  2. 在“ Connections面板中选择最顶行(通常是您的 PC 名称)
  3. 在右侧面板的最底部,在Management下,您应该有Web Platform Installer
  4. 加载后,选择Products
  5. cgi的搜索类型中,然后按<Enter>
  6. 选择IIS: CGI然后点击右边的Add ,最后点击底部的Install
  7. 安装后它应该强制您重新启动您的PC,您应该得到修复。

我遇到了类似的问题,每当向它们发出 Web 请求时,我的所有应用程序池都会停止。 虽然我在事件查看器中收到以下错误:

应用程序池“appPoolName”的工作进程在尝试从文件“\\?\\C:\\inetpub\\temp\\apppools\\appPoolName\\appPoolName.config”中读取配置数据时遇到错误“配置文件格式不正确的 XML”,行数字“3”。 数据字段包含错误代码。

这告诉我在 application.config 中有错误:

C:\\Windows\\System32\\inetsrv\\config\\applicationHost.config

在我的场景中,我在部署时编辑了 web.config,其中包含一个 IIS 明显不喜欢的元素,applicationHost.config 抓取了 web.config 并插入了这个坏元素,并且在我手动删除它之前无法解析

除了此链接中 Orhan 的回答中概述的步骤之外,您可能还需要通过转到 IIS 管理器 > 服务器根目录 > 模块 > 配置本机模块来额外删除本机模块。 选择 MfeEngine,然后选择删除。

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

要解决此问题,请按照我遇到相同问题时的步骤操作,以下解决方案对我有用

1- 将文件夹“C:\\inetpub\\temp”的完全权限或至少读取访问权限授予 IIS_IUSRS

2- 还要检查授予文件夹“C:\\inetpub\\wwwroot”的用户 IIS_IUSRS 的相同权限。

希望这个解决方案有效!

在设置全新的 Classic ASP 网站时,我们在 Windows Server 2019 上遇到了此类 503 错误。

实际上,在 App Pool 中,将“ .NET CLR Version ”设置为“ No Managed code ”会导致 App Pool 在启动后 2 秒停止,从而在 Windows 事件日志中产生 WAS 5002 和 5021 错误。

解决方案是放置“ v4.0 ”,即使没有使用 .NET。

发生这种情况的一个可能原因是您的服务器计算机中没有足够的磁盘空间。 您可以在事件查看器中找到更多信息。 如果发生这种情况,只需停止 IIS,清理一些可用磁盘空间并重新启动 IIS,然后启动 App Poll。 在此处输入图片说明

我参加聚会迟到了,但没有列出对我有用的解决方案。

我的解决方案是简单地删除 IIS 中的 web 站点和应用程序池,然后重新创建它们

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

重新创建后,该网站无需任何其他建议即可开始使用。

这个答案对你有帮助吗?
如果您在 EventViewer 中收到以下消息

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

那么是的,这将解决您的问题


检查您的事件查看器

  1. 按 Win+R 并键入: eventvwr ,然后按 ENTER。
  2. Windows Event Viewer的左侧,单击Windows Logs -> Application
  3. 现在您需要在中间窗口中找到源IIS-W3SVC-WP一些错误。

如果您收到上一条消息错误,则解决方案是:

安装 Microsoft Visual C++ 2015 Redistributable 86x 和 64X(两者)

来源

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

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

在确定要加载哪个模块来为请求提供服务并尝试将 64 位版本加载到 32 位进程中时,IIS 似乎仍然加载该模块不是 bueno。

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

这篇博文帮助我解决了几天后的问题。 希望它可以帮助某人。 包含解决方案的博客文章

授予文件夹“C:\\inetpub”的完全权限 为我工作!

就我而言,web 站点显示“503 服务不可用”,应用程序事件日志显示“...\aspnetcorev2.dll 加载失败。数据是错误。” 这只发生在 IIS 设置“启用 32 位应用程序”为True的 IIS 站点上。 系统正在停止这些站点的应用程序池,这就是在尝试检索站点时生成“503 服务不可用”消息的原因。

事实证明,此应用程序事件日志中指定的路径甚至不存在。 尝试修复系统上安装的两个“Microsoft.NET Core SDK 2.1.50x”版本并没有解决问题,也没有安装微软似乎可用的最新且唯一的 aspnetcorev2.dll,也没有卸载这些 SDK。

注意:Microsoft 似乎甚至不再提供已安装在我的系统上的原始 v2 ASP.NET Core 版本的安装程序。

什么有效:由于我在此系统上没有任何 ASP.NET 核心站点,因此对我有用的解决方案是从我的系统中卸载所有相关的 DLL,并通过将它们从 IIS applicationhost.config 文件中将它们注释掉(参见aspnetcore.dll 未能加载applicationhost.config 文件路径在 IIS 7、7.5、8、8.5 和 IIS 10? 如果您确实使用更高版本的 ASP.NET 内核,我认为您也可以更新 applicationhost.config 中的引用 [我没有尝试过]。

检查写入 [事件查看器\Windows 日志\系统] 节点的日志。 来源是“WAS”。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM