无法在Windows 8上的IIS中提供WCF服务

205

当我尝试在Windows 8机器上通过IIS提供WCF服务时,我遇到了一个众所周知的错误。

  

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

旧的解决方法是运行aspnet_regiis -i,但这个命令似乎在Windows 8中已被弃用,会产生响应此选项不支持此操作系统版本。(...)

那么解决方法是什么呢?

(我已经成功启用了常规的aspx页面,因此大部分的IIS配置似乎都正常。)


有关于 aspnet_regiis -i 命令的更多信息,适用于 Windows 8 之前的用户,请参阅此链接:http://www.aspsnippets.com/Articles/ASPNet-IIS7-The-page-you-are-requesting-cannot-be-served-because-of-the-extension-configuration-If-the-page-is-a-script-add-a-handler-If-the-file-should-be-downloaded-add-a-MIME-map.aspx。 - David
6个回答

426

看起来很简单:应该使用“程序和功能 -> 打开或关闭Windows功能”在控制面板中启用WCF服务。 转到“.NET Framework高级服务 -> WCF服务”,并按照MSDN博客文章中所述启用HTTP激活。

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

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

6
我花时间查看了IIS管理器。我认为IIS管理器应该有一个图标,指导或告诉用户关于.NET Framework高级服务的情况。 - Tony_Henrich
5
我也遇到了和Ben Anderson一样的错误提示:"可能未启用某个必需的父功能",然后尝试了错误提示中的建议(添加/all参数),结果成功了:DISM /Online /Enable-Feature /all /FeatureName:WCF-HTTP-Activation45 - Troy Gizzi
2
您真是太棒了。您还可以添加(这是一个微小的细节),这取决于 .Net Framework 版本。例如:.NET 3.5 Framework 高级服务 -> Windows Communication Foundation HTTP 激活 - rion18
这真是救命稻草。大多数在线解决此问题的方法只让你在Web功能下启用.Net 3.5 Framework。那还不够。你还需要按照这里提到的步骤去做。 - markaaronky
打开.NET Framework高级服务/WCF服务/HTTP激活Windows功能后,我在Visual Studio中尝试更新WCF服务的服务引用时遇到的错误得到了修复。 - jdnew18
显示剩余2条评论

99

对于Windows Server 2012,解决方案与faester的方法非常相似(请参见上文)。从服务器管理器中,点击添加角色和功能,选择适当的服务器,然后选择功能。在.NET Framework 4.5功能下,您将看到WCF服务,在其中,您将找到HTTP激活


谢谢您!但是对于.NET 4呢?您认为启用这些功能是否也适用于.NET v4.0? - Aladdin Gallas
2
在添加了Windows功能后,您还需要执行以下操作才能在任何现有的Web应用程序中完成:
  • 启动inetmgr
  • 打开“处理程序映射”
  • 检查扩展名为*.svc的svc-ISAPI映射是否存在。如果不存在,请使用“还原到父级”操作从父网站复制它们。 请注意,这假定在应用程序的web.config中配置了自定义处理程序映射,这通常是在IIS7+中的情况。如果没有,则在执行“还原到父级”时将失去这些内容。
- Berend Engelbrecht

15

您还可以通过打开Windows功能来实现此目的。 输入图像描述 输入图像描述


13
请在IIS 8.0上执行以下两个步骤:
1. 添加新的MIME类型和HttpHandler - 扩展名:.svc, MIME类型:application/octet-stream
- 请求路径:*.svc, 类型:System.ServiceModel.Activation.HttpHandler, 名称:svc-Integrated

我非常老的Windows 7安装程序无法启用.Net 3.5(Http和Non-Http Activation)和WAS,重新安装操作系统太过麻烦。请问有什么最佳解决方案? - tinonetic
特别是在创建和添加自己的处理程序时,了解这种方法非常值得。但是,如果您使用“打开和关闭Windows功能”,您将获得大多数已知的文件扩展名,这将节省您逐个添加每个扩展名(并找出所有正确的详细信息)的时间。 - Daniel Hollinrake

4

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

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

当然,您也可以从PowerShell中调用DISM命令。

非常好。谢谢你提供的信息。 - Rod Hartzell

-1
你可以将这段代码添加到 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端点工作吗? - faester
如果我理解正确,您可以更改所需的扩展名。您可以从https://feedforall.com/mime-types.htm查看,但您可能会说另一件事,抱歉我无法理解。 - malik masis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接