我遇到了一个奇怪的问题,我无法解决,也没有找到任何相关信息:应用程序池和站点我们的 IIS 8.5 的 IIS 管理器中的节点丢失了!
这是我们运行的四台服务器中的一台,设置非常相似,但它是唯一一台使用 Windows Server 2012 R2 和 IIS 8.5 的服务器:我们有默认的应用程序池,以及一个用于我们的应用程序的应用程序池,以及使用我们的应用程序池的站点和 Web 应用程序。一切都运行良好,直到 2014 年 6 月 1 日星期日,我们从监控服务收到一条错误消息,称我们的应用程序在该服务器上不可用。
我们在事件日志中发现了以下条目:
[20:44:24] A worker process '27520' serving application pool 'camping.info' failed to stop a listener channel for protocol 'http' in the allotted time. The data field contains the error number.
[20:44:24] A process serving application pool 'camping.info' exceeded time limits during shut down. The process id was '27520'.
[20:45:54] A worker process '40744' serving application pool 'camping.info' failed to stop a listener channel for protocol 'http' in the allotted time. The data field contains the error number.
[20:45:54] A process serving application pool 'camping.info' exceeded time limits during shut down. The process id was '40744'.
[20:45:54] Application pool 'camping.info' is being automatically disabled due to a series of failures in the process(es) serving that application pool.
当我们通过 RDP 进入服务器并查看 IIS 管理器时,应用程序池和站点节点不再可见。相反,事件日志中充满了类似以下的错误(由于尝试打开服务器节点以下首页):
IISMANAGER_ERROR_LOADING_PROVIDER_TYPE
IIS Manager could not load type 'Microsoft.Web.Management.AspNet.SessionState.SessionStateModuleProvider, Microsoft.Web.Management.Aspnet, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' for module provider 'SessionState' that is declared in %windir%\system32\inetsrv\config\administration.config. Verify that the type is correct, and that the assembly that contains the module provider is in the Global Assembly Cache (GAC).
Exception:System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Web.Management.Aspnet, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.Web.Management.Aspnet, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
at System.Type.GetType(String typeName, Boolean throwOnError)
at Microsoft.Web.Management.Server.AdministrationModuleProvider.GetModuleProvider(String userName, String connectionName)
在尝试恢复有效的 iis 配置 (C:\Windows\System32\inetsrv\Config\applicationhost.config) 几次后,我们甚至完全卸载了 IIS 并重新安装(虽然有些困难),但无济于事。在磁盘上搜索丢失的 dll 时,我们发现它们的版本实际上是 8.5。。因此我们继续将 C:\Windows\System32\inetsrv\Config\administration.config 中的所有 8.0.0.0 实例替换为 8.5.0.0,但错误仍然存在(仍然提到 8.0.0.0!)。
有趣的是我们的应用程序再次运行在服务器上 - 只是我们无法在 IIS 管理器中看到它。我们希望能够通过 GUI 进行管理并消除事件日志中的这些错误。
有谁愿意接受吗?
答案1
最终解决了我的情况:
在我的计算机上,似乎 msdeploy 和/或 Visual Studio 2012 损坏了 applicationhost.config 文件。不过看起来还好。但经过彻底的比较后,我发现它将 (sites) (/sites) 放在了错误的位置,树视图没有出现在 IIS 管理器中。将 sites 部分移回应在的位置就可以解决问题。(就在 (/log) 部分之后)
MSdeploy 本来运行良好,只是搞砸了 IIS 管理器站点视图。
我只在通过 VS2012 和 msdeploy 部署站点的服务器上发生过这种情况,2012R2 运行 IIS8.5
答案2
卸载 IIS 时,您是否删除了 下的所有内容C:\Windows\System32\inetsrv
?如果没有,损坏的内容可能会留在那里。
答案3
不确定这里是否是这种情况,但对于我在我们的系统上遇到的类似情况,这只是版本不匹配的情况。
例如,最初创建共享配置的服务器是带有 IIS 8.0 的 Server 2012,但尝试访问它并显示所述症状的服务器是带有 IIS 8.5 的 Server 2012 R2。
加载 IIS 管理器后查看事件日志,您应该看到大量错误,表明存在缺少模块的问题,很可能是由于版本控制问题。
答案4
尝试从 Windows 组件(控制面板 --> 程序和功能)重新安装 IIS。