【问题标题】:Cannot serve WCF services in IIS on Windows 8无法在 Windows 8 上的 IIS 中提供 WCF 服务
【发布时间】:2012-07-12 16:38:52
【问题描述】:

当我尝试在 Windows 8 机器上的 IIS 上提供 WCF 服务时,我收到了众所周知的错误

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

旧的解决方法是运行 aspnet_regiis -i,但此命令似乎已在 Windows 8 中被弃用,产生响应 This option is not supported on this version of the operating system. (...)

解决办法是什么?

(我已经成功启用了常规的aspx 页面,所以大部分 IIS 配置看起来都很健康。)

【问题讨论】:

标签: wcf iis windows-8


【解决方案1】:

似乎是不费吹灰之力;应使用控制面板中的Programs and Features -> Turn Windows features on or off 启用 WCF 服务。转到.NET Framework Advanced Services -> WCF Services 并启用HTTP Activation,如this blog post on mdsn 中所述。

从命令提示符(以管理员身份),您可以运行:

C:\> DISM /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation
C:\> DISM /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation45

如果遇到错误,请使用以下内容

C:\> DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation
C:\> DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation45

【讨论】:

  • 我花时间查看 IIS 管理器。我认为 IIS 管理器应该有一个图标来指导或告诉用户有关 .NET Framework 高级服务的信息。
  • 使用命令提示符出现错误“操作已完成,但未启用 WCF-HTTP-Activation 功能。可能未启用所需的父功能。您可以使用 /enable-feature /自动启用以下列表中的每个父功能的所有选项。如果父功能已启用,请参阅日志文件以进行进一步诊断。”。我改用 GUI 方法是为了知道我打开了什么并且它起作用了。
  • 我得到了与 Ben Anderson 相同的“可能无法启用所需的父功能”错误,并尝试了错误消息中的建议(添加 /all 参数),然后效果很好:@ 987654328@.
  • 你先生,太棒了。您还可以添加(这是一个很小的细节)这可以根据 .Net Framework 版本来完成。如.NET 3.5 Framework Advanced Services -> Windows Communication Foundation HTTP Activation
  • 这是救命稻草。此问题的大多数在线解决方案仅让您在 Web 功能下启用 .Net 3.5 Framework。这还不够。您还必须采取此处提到的步骤。
【解决方案2】:

对于 Windows Server 2012,该解决方案与 faester 的解决方案非常相似(见上文)。在服务器管理器中,单击Add roles and features,选择适当的服务器,然后选择Features。在.NET Framework 4.5 Features 下,你会看到WCF Services,在它下面,你会看到HTTP Activation

【讨论】:

  • 谢谢你!但是.Net 4 怎么样?您认为启用此功能对 .Net v4.0 有同样的效果吗?
  • 在任何现有的 Web 应用程序中,添加 Windows 功能后,您还必须执行以下操作: - 启动 inetmgr - 打开“处理程序映射” - 检查扩展 *.svc 的 svc-ISAPI 映射是否为展示。如果没有,请使用“还原为父级”操作从父级网站复制它们。请注意,这假定在 web.config 中为应用程序配置了自定义处理程序映射,这在 IIS7+ 中通常是这种情况。如果没有,您将在执行“Revert To Parent”时丢失。
【解决方案3】:

请在 IIS 8.0 上执行以下两个步骤

添加新的 MIME 类型和 HttpHandler

  1. 扩展名:.svc, MIME 类型:application/octet-stream

  2. 请求路径:*.svc, 类型:System.ServiceModel.Activation.HttpHandler, 名称:svc-Integrated

【讨论】:

  • 我非常旧的 Windows 7 安装无法启用的最佳解决方案 - .Net 3.5(Http 和非 Http 激活)和 WAS。重装操作系统太微妙了
  • 这个方法值得了解,尤其是在创建和添加您自己的处理程序时。但是,如果您使用“打开和关闭 Windows 功能”,您将获得大多数已知的文件扩展名,这将节省您单独添加每个文件扩展名的时间(并找出所有正确的详细信息)
【解决方案4】:

您也可以通过打开 Windows 功能来实现此目的。

【讨论】:

    【解决方案5】:

    这与 faester 的解决方案和 Bill Moon 的解决方案实际上是相同的解决方案,但以下是使用 PowerShell 的方法:

    Import-Module Servermanager
    Add-WindowsFeature AS-HTTP-Activation
    

    当然,也没有什么能阻止您从 PowerShell 调用 DISM

    【讨论】:

    • 非常好。谢谢你的信息。
    【解决方案6】:

    您可以将此代码添加到asp mvc中的web.config

       <system.webServer>
        <staticContent>
          <remove fileExtension=".srt" />
          <mimeMap fileExtension=".srt" mimeType="text/srt" />
          <remove fileExtension=".vtt" />
          <mimeMap fileExtension=".vtt" mimeType="text/vtt" />
        </staticContent>
      </system.webServer>
    

    您可以使用文件扩展名更改文件扩展名

    【讨论】:

    • 嗨@malik - 您能否阐明映射文件扩展名如何使 svc-endpoints 工作?
    • 如果我理解正确,您可以根据需要更改扩展名。你可以从feedforall.com/mime-types.htm看,但你会说别的,抱歉我听不懂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多