有很多关于这个的帖子,我现在已经尝试了很多东西。但无济于事。我自己基本上是一个 Winforms 开发人员,几天前我的公司正在采取 Web 计划时开始研究这个 Web 的东西。
我有一个 ASP.Net 项目,我想将它托管在本地 IIS 上。在 Project properties -> Web
设置中,我选择了 Use Local IIS Server
并将 URL 设为 localhost/MyApp
。我尝试在我的 Firefox 浏览器上访问它并收到错误为 HTTP Error 503. The service is unavailable.
以前我遇到了许多其他错误,我一一修复了它们。但是被这个打动了。这些是我在项目中的设置
应用程序池设置为 ASP.Net v4.0 经典应用程序池启用 32 位应用程序属性为真应用程序池已启动项目构建属性设置为目标框架的任何 CPU
但我想提一个奇怪的行为。以下是我面临的事情
应用程序池已启动 我尝试访问我的本地网站(通过将 url 提供为 localhost/MyApp)我收到错误为 HTTP 错误 503。服务不可用 应用程序池已停止
我看过 following link 并且已经尝试过了。对于上述行为,我达到了 here。根据此链接,计算机名称中不应包含 .
。我的计算机名称中没有任何 .
,但其中有 -
。我的域名也包含 .
。此外,我无法更改这些设置,因为我的办公室笔记本电脑和我们的 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 运行该网站。
Enable 32 bit Application
,但您是否使用任何 32 位的 DLL?
Any CPU
。所以我认为用过的dll应该不是问题。请参阅 Global.asax 代码的编辑。谢谢
发生这种情况的一个可能原因是 IIS 中的应用程序池被配置为在某个自定义帐户下运行,而该帐户不存在或提供了错误的密码,或者密码已更改。查看 IIS 中应用程序池的高级属性,它用于哪个帐户。
此外,事件日志可能包含有关应用程序池在第一次请求时立即停止的原因的更多信息。
https://i.stack.imgur.com/Eb0th.png
好的,对于一个特定情况,我有另一种解决方案:如果您使用 WINDOWS 10,并且您最近更新了它(使用周年更新包),您需要按照以下步骤操作:
检查您的 Windows 事件查看器 - 按 Win+R 并键入:eventvwr,然后按 ENTER。在 Windows 事件查看器的左侧,单击 Windows 日志 -> 应用程序。现在您需要在中间窗口中找到源 IIS-W3SVC-WP 的一些错误。可能您会看到如下消息:
模块 DLL >>path-to-DLL<< 加载失败。数据是错误的。
您必须转到控制面板-> 程序和功能,根据无法加载的 dll,您需要修复另一个模块:对于 rewrite.dll - 找到 IIS URL 重写模块 2,然后单击更改-> 修复 aspnetcore.dll - 查找Microsoft .NET Core 1.0.0 - VS 2015 Tooling ...并单击更改->修复。重启你的电脑。
The Module DLL C:\Windows\System32\inetsrv\iis_ssi.dll failed to load. The data is the error.
所以我安装了 Select Server Side Includes per this suggestion
对于我的情况,我的登录密码已更改,而应用程序池仍使用旧密码。因此,只需单击应用程序池的“高级设置”并重置您的“身份”。
我遇到了同样的问题,并使用事件日志对其进行了调试。首先它说:“无法找到来自源 Microsoft-Windows-WAS 的事件 ID 5059 的描述”。
然后我使用 turn windows features on/off 打开 WAS。然后我在eventvwr“找不到Microsoft-Windows-DistributedCOM”中看到了这个。
最后我放弃并删除了应用程序池(用于停止访问网站)并再次创建它,原样。这解决了问题。
appcmd list site /xml | appcmd set site /[path='/'].applicationPool:YOURNEWPOOL /in
大多数时候,它是由于 AppPool 设置而发生的。
检查以下内容以解决此问题
检查 Apppool 服务是否正在运行。检查 AppPool 的身份。如果该身份已更改,请输入新密码。
下图显示了 IIS 中的这些设置
https://i.stack.imgur.com/y9U8O.png
对于使用 Windows 10 并在更新到周年更新后来到这里的任何人,请查看此链接,它对我有帮助:
万一链接断开:如果您的事件日志显示 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
从页面引用:
单击开始,运行,键入资源管理器,然后单击确定。导航到:%windir%\system32\inetsrv\config 以管理员身份打开文件 applicationHost.config 以便在记事本中进行编辑。编辑
在我的情况下,我检查了事件日志,发现错误是无法读取配置文件'试图从文件'\\?\',行号'0'读取配置数据。数据字段包含错误代码。
错误代码为 2307。
我删除了 C:\inetpub\temp\appPools 中的所有文件并重新启动了 iis。它解决了这个问题。
我有一个类似的问题。我通过将我的用户添加到“本地安全策略”>“本地策略”>“用户权限分配”下的“作为批处理作业登录”策略来解决它。
当我第一次添加服务并为其创建应用程序池时。我从命令提示符处执行了“iisreset”,它起作用了。
我遇到了这个错误,就我而言,原因是前一段时间我修改了用户密码,直到我重新启动应用程序池才出现 503 错误。
所以我修复了它在应用程序池/高级设置/身份/[...]/设置.../密码/确认密码上设置新密码
如果您可以在 Visual Studio 调试器中运行该网站,则可能能够看到应用程序池在您的代码中崩溃的位置。在我的例子中,它是一个被无限次递归调用的函数,这导致了堆栈溢出。注意:Windows 事件日志和 IIS 日志对诊断问题没有帮助。
我对 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
问题(感谢 Microsoft),即您的 Event Viewer
The Module DLL C:\WINDOWS\System32\inetsrv\cgi.dll failed to load. The data is the error.
然后解决这个问题:
转到 IIS 管理器 选择 Connections 面板中的最上面一行(通常是您的 PC 名称) 在右侧面板的最底部,在 Management 下,您应该有 Web Platform Installer 加载后,在 cgi 中的搜索类型中选择 Products 然后点击
要解决问题,请按照我遇到相同问题的步骤操作,以下解决方案对我有用
1- 将文件夹“C:\inetpub\temp”的完全权限或至少读取访问权限授予 IIS_IUSRS
2- 还检查授予文件夹“C:\inetpub\wwwroot”的用户 IIS_IUSRS 的相同权限。
希望这个解决方案有效!
我遇到了类似的问题,每当向它们发出 Web 请求时,我的所有应用程序池都会停止。虽然我在事件查看器中收到以下错误:
应用程序池“appPoolName”的工作进程遇到错误“配置文件不是格式良好的 XML”,试图从文件“\?\C:\inetpub\temp\apppools\appPoolName\appPoolName.config”读取配置数据,行数字“3”。数据字段包含错误代码。
这告诉我 application.config 中有错误:
C:\Windows\System32\inetsrv\config\applicationHost.config
在我的场景中,我在部署时使用 IIS 明显不喜欢的元素编辑了 web.config,applicationHost.config 刮掉了 web.config 并插入了这个坏元素,直到我手动删除它才能解决
除了 this link from Orhan's answer 中列出的步骤之外,您可能还需要通过转到 IIS 管理器来删除本机模块 >服务器根目录 >模块 >配置本机模块。选择 MfeEngine,然后选择删除。
将“托管管道模式”从“经典”更改为“集成”对我有用。它可以在应用程序池 -> 基本设置中更改
https://i.stack.imgur.com/CfcHK.png
在我们设置全新的 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 中的网站和应用程序池,然后重新创建它们。
这是因为最初我先创建了站点/文件夹,然后安装了 dotnet 核心运行时。由于某种原因,这无法让网站启动。
重新创建后,该网站无需任何其他建议即可开始使用。
这个答案会帮助你吗?如果您在 EventViewer 中收到以下消息
模块 DLL aspnetcorev2.dll 加载失败。数据是错误的。
那么是的,这将解决您的问题
检查您的事件查看器
按 Win+R 并键入:eventvwr,然后按 ENTER。在 Windows 事件查看器的左侧,单击 Windows 日志 -> 应用程序。现在您需要在中间窗口中找到源 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 似乎仍然加载该模块是不行的。
最后,我不得不从服务器上卸载所有版本的 .net core 并重新安装最新的(此时 3.1.15-我们还没有使用 5)。之后,我的 32 位应用程序和 .net 核心应用程序可以在同一台服务器上共存。
经过几天的努力,这是帮助我解决这个问题的博客文章。希望它可以帮助某人。 Blog post with the solution
授予文件夹“C:\inetpub”的全部权利 为我工作!