65.9K
CodeProject 正在变化。 阅读更多。
Home

Internet Information Services 的神秘案例

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (15投票s)

2010年9月20日

CPOL

4分钟阅读

viewsIcon

63547

IIS 中的一系列问题。

引言

任何开发者都会同意,微软的产品,尤其是 IIS,经常会遇到一些不寻常的情况。这主要发生在主要产品升级之后。我们已经习惯了旧版本,以至于我们想永远保留它,拒绝适应新版本的设置。本文的目的是描述我在不同情况下遇到的 IIS(主要是 7.5 版本)的特殊性。我记录了一些问题及其解决方案。

目的是建立一个知识库,以便其他人可以从这些技巧中受益,并节省宝贵的时间来绞尽脑汁思考 IIS 抛出的那些令人费解的错误消息!

注意 – 对于下面提到的每种情况,我还提到了遇到的 IIS 版本和操作系统。除非另有说明,否则解决方案也将特定于该操作系统。如果您使用的是其他操作系统,则需要相应地进行调整。

问题 #1 - 在 IIS 中托管 WCF 服务的难题 (IIS 7.5, 操作系统 – Windows 7)

如果您是第一次在 IIS 7.5 上托管 WCF 服务 *.svc 文件,您很可能会遇到以下错误:

404 - 未找到 - 由于扩展配置,无法提供您请求的页面。如果页面是脚本,请添加处理程序。如果文件应下载,请添加 MIME 映射。

这是因为任何虚拟目录默认配置的 HTTP 处理程序都没有 *.svc 扩展的映射。您需要这样做才能使一切正常工作:

  1. 转到命令提示符。
  2. 使用 DOS 命令导航到以下文件夹:
    C:\Windows\Microsoft.Net\Framework\v3.0\Windows Communication Foundation
  3. 类型
    ServiceModelReg –i

您应该一切就绪。现在,如果您转到目录并检查处理程序映射,您应该会看到 *.svc 映射到 svc-ISAPI-2.0。请参阅下面的屏幕截图。

Curious-Case-IIS/ServiceModelReg.jpg

问题 #2 - 在 IIS 中看不到 Windows 身份验证 (IIS 7.5, 操作系统 – Windows 7)

默认情况下,IIS 7.0 只有以下身份验证模式:

  • 匿名 (默认启用)
  • 模拟 (默认禁用)
  • 窗体 (默认禁用)

那么,那个老旧的 Windows 身份验证去哪儿了?嗯,为了让我们(开玩笑)更容易,微软决定默认不启用它们。如果您需要在 IIS 身份验证页面上看到它们,那么您需要执行以下操作:

  1. 转到 - 开始 --> 控制面板 -> 程序和功能
  2. 点击 -> 切换 Windows 功能的“启用”或“关闭”位于左侧窗格
  3. 找到 Internet Information Services 并展开
  4. 展开万维网服务
  5. 展开安全性
  6. 从列表中选择 Windows 身份验证,然后单击确定。

请参阅下面的屏幕截图

Curious-Case-IIS/WindowsAuth.jpg

Curious-Case-IIS/WindowsFeatures.jpg

Curious-Case-IIS/image004.jpg

问题 #3 - 错误 - 用户“IIS APPPOOL\Classic .NET”登录失败

当我的 Web 服务尝试使用 Windows 凭据访问数据库时,我遇到了这个问题。主机服务器运行 SQL Server 2008,HTTP 请求通过 IIS 7.5 进行路由。

此问题的解决方案在于更改 Classic .NET 应用程序池的进程模型中的 `Identity` 属性。如果发生这种情况,那么很可能您的虚拟目录已映射到 Classic .NET App Pool。

  1. 打开 IIS 管理器(运行 -> inetmgr)
  2. 在 IIS 管理器中,选择应用程序池
  3. 右键单击 -> Classic .NET App Pool。单击高级设置
  4. 浏览到进程模型中的 Identity 属性
  5. 将其从 `ApplicationPool` Identity 更改为 Local System。

您应该一切就绪。请参阅下面的屏幕截图。

Curious-Case-IIS/image005.jpg

Curious-Case-IIS/image006.jpg

问题 #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`,它在集成管理型管道模式下工作。

  1. 打开 IIS 管理器(运行 -> inetmgr)
  2. 单击应用程序池。选择 `DefaultAppPool` -> 双击
  3. 将托管管道模式从集成更改为经典。

Curious-Case-IIS/image007.jpg

方法 #2 – 为您的虚拟目录创建一个新的应用程序

  1. 在 Inetmgr -> 选择您的 Web 目录
  2. 右键单击 -> 删除
  3. 右键单击 -> 选择转换为应用程序。
  4. 选择 `Classic.NetAppPool`。

您应该一切就绪。无论哪种情况,您都将映射您的虚拟目录以使用 Classic Managed Pipeline Mode 进行通信。

请参阅下面的屏幕截图

Curious-Case-IIS/image008.jpg

Curious-Case-IIS/image009.jpg

Curious-Case-IIS/image010.jpg

摘要

我希望本文能帮助解释 IIS 一些常见的晦涩问题。我计划在我获得更多信息时添加更多内容。欢迎读者添加和分享他们的经验。

© . All rights reserved.