Internet Information Services 的神秘案例






4.76/5 (15投票s)
IIS 中的一系列问题。
引言
任何开发者都会同意,微软的产品,尤其是 IIS,经常会遇到一些不寻常的情况。这主要发生在主要产品升级之后。我们已经习惯了旧版本,以至于我们想永远保留它,拒绝适应新版本的设置。本文的目的是描述我在不同情况下遇到的 IIS(主要是 7.5 版本)的特殊性。我记录了一些问题及其解决方案。
目的是建立一个知识库,以便其他人可以从这些技巧中受益,并节省宝贵的时间来绞尽脑汁思考 IIS 抛出的那些令人费解的错误消息!
注意 – 对于下面提到的每种情况,我还提到了遇到的 IIS 版本和操作系统。除非另有说明,否则解决方案也将特定于该操作系统。如果您使用的是其他操作系统,则需要相应地进行调整。
问题 #1 - 在 IIS 中托管 WCF 服务的难题 (IIS 7.5, 操作系统 – Windows 7)
如果您是第一次在 IIS 7.5 上托管 WCF 服务 *.svc 文件,您很可能会遇到以下错误:
这是因为任何虚拟目录默认配置的 HTTP 处理程序都没有 *.svc 扩展的映射。您需要这样做才能使一切正常工作:
- 转到命令提示符。
- 使用 DOS 命令导航到以下文件夹:
C:\Windows\Microsoft.Net\Framework\v3.0\Windows Communication Foundation
- 类型
ServiceModelReg –i
您应该一切就绪。现在,如果您转到目录并检查处理程序映射,您应该会看到 *.svc 映射到 svc-ISAPI-2.0。请参阅下面的屏幕截图。
问题 #2 - 在 IIS 中看不到 Windows 身份验证 (IIS 7.5, 操作系统 – Windows 7)
默认情况下,IIS 7.0 只有以下身份验证模式:
- 匿名 (默认启用)
- 模拟 (默认禁用)
- 窗体 (默认禁用)
那么,那个老旧的 Windows 身份验证去哪儿了?嗯,为了让我们(开玩笑)更容易,微软决定默认不启用它们。如果您需要在 IIS 身份验证页面上看到它们,那么您需要执行以下操作:
- 转到 - 开始 --> 控制面板 -> 程序和功能
- 点击 -> 切换 Windows 功能的“启用”或“关闭”位于左侧窗格
- 找到 Internet Information Services 并展开
- 展开万维网服务
- 展开安全性
- 从列表中选择 Windows 身份验证,然后单击确定。
请参阅下面的屏幕截图
问题 #3 - 错误 - 用户“IIS APPPOOL\Classic .NET”登录失败
当我的 Web 服务尝试使用 Windows 凭据访问数据库时,我遇到了这个问题。主机服务器运行 SQL Server 2008,HTTP 请求通过 IIS 7.5 进行路由。
此问题的解决方案在于更改 Classic .NET 应用程序池的进程模型中的 `Identity` 属性。如果发生这种情况,那么很可能您的虚拟目录已映射到 Classic .NET App Pool。
- 打开 IIS 管理器(运行 -> inetmgr)
- 在 IIS 管理器中,选择应用程序池
- 右键单击 -> Classic .NET App Pool。单击高级设置
- 浏览到进程模型中的 Identity 属性
- 将其从 `ApplicationPool` Identity 更改为 Local System。
您应该一切就绪。请参阅下面的屏幕截图。
问题 #4 - 托管 HTTP 处理程序的难题 (IIS 7.5, 操作系统 – Windows 7)
我在 IIS 7.5 上尝试托管 HTTP 处理程序时遇到了这个问题。我将我的 DLL 放在了虚拟目录的 _Bin_ 文件夹中,并设置了一个 _web.config_ 文件,其中包含必要的 ISAPI 过滤器映射。当我尝试访问 HTTP 处理程序时,我收到了以下错误消息:
HTTP 错误 500.23 - 内部服务器错误
检测到 ASP.NET 设置,该设置不适用于集成管理型管道模式。
这可能是因为您的虚拟目录映射到一个托管管道模式 = 集成的应用程序池。您需要将其更改为 Classic。要做到这一点,请执行以下任一操作:
方法 #1 – 更改您的虚拟目录映射到的应用程序池的托管管道模式。默认情况下,您的虚拟目录将映射到 `DefaultAppPool`,它在集成管理型管道模式下工作。
- 打开 IIS 管理器(运行 -> inetmgr)
- 单击应用程序池。选择 `DefaultAppPool` -> 双击
- 将托管管道模式从集成更改为经典。
方法 #2 – 为您的虚拟目录创建一个新的应用程序
- 在 Inetmgr -> 选择您的 Web 目录
- 右键单击 -> 删除
- 右键单击 -> 选择转换为应用程序。
- 选择 `Classic.NetAppPool`。
您应该一切就绪。无论哪种情况,您都将映射您的虚拟目录以使用 Classic Managed Pipeline Mode 进行通信。
请参阅下面的屏幕截图
摘要
我希望本文能帮助解释 IIS 一些常见的晦涩问题。我计划在我获得更多信息时添加更多内容。欢迎读者添加和分享他们的经验。