在IIS8上使用WCF;*.svc处理程序映射无法工作

287

我正在尝试在Windows Server 2012版本8400上的IIS8中运行WCF服务。

在安装Web角色时,未发现类似于Windows Server 2008中的WCF组件(在3.51下)。

安装后,svc处理程序映射丢失了,所以我执行了以下操作:

%windir%\Microsoft.NET\Framework\v3.0\WindowsCommunication Foundation\ServiceModelReg.exe –i

现在处理程序映射已经存在,但我仍然遇到以下问题:

The resource you are looking for does not have a handler associated with it.

(我删除了静态文件处理程序。)

该网站正在使用经典的管道以使用模拟。

12个回答

589

具体步骤如下:

  1. 运行任务栏或开始菜单中的 Server Manager
  2. 选择要管理的服务器(通常为本地服务器)。
  3. 向下滚动到 "角色与功能" 部分。
  4. 从任务下拉菜单中选择 "添加角色或功能"。
  5. 在左侧页面列表中,点击 "功能"。
  6. 展开已安装的 ".Net 3.5"".Net 4.5",如果您没有安装,可以返回 "角色" 屏幕进行添加。
  7. 在 "WCF服务" 下,选中 "HTTP激活" 复选框。如果您需要其他非HTTP类型(例如tcp、命名管道等),也可以添加。
  8. 点击 "安装" 按钮。

6
这种方法在我的情况下无效,因为我使用的是Windows 8(带有IIS 8)。 - Josh Mouch
9
如果您最初从v3.0目录运行了ServiceModelReg.exe -i,则需要再运行ServiceModelReg.exe -ua来撤消它,然后才能使此操作生效。 - Scott Anderson
16
命令行中的指令:dism /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation /All。 - Richard
4
关于http://gyorgybalassy.wordpress.com/2012/09/24/publishing-a-wcf-service-on-iis8/,有什么问题吗?哪种方式更好? - Kiquenet
10
我一直盯着“服务器角色”页面看了一个小时,没想到你可以只需点击“下一步”或者在左侧点击“功能”。 o_O +1 - Dan Bechard
显示剩余9条评论

232

我必须在.NET Framework 4.5高级服务中启用HTTP Activation,以便使用WCF Services

启用HTTP激活


10
这是针对没有服务器管理器的 Windows 8 操作系统所需做的事情。 - Simon_Weaver
2
当您在Windows 8和Windows 8.1中托管WCF服务时,这就是答案。 - vcRobe
HTTP激活。无论您使用http / https,它都是一样的吗?因此,这是两者的总称,还是仍然需要区分它们? - Thomas
2
我在IIS 10上遇到了类似的问题,Http激活默认是关闭的。启用它立即解决了问题。谢谢! - dhruvpatel
6
Windows 10、IIS 10 兼容。 - watbywbarif

47

在“打开或关闭Windows功能”中打开以下内容:

a) .Net Framework 3.5 - WCF HTTP 激活和非HTTP激活

b) 所有 WCF 服务下的选项


1
我只需要打开 .Net Framework 3.5 - WCF HTTP 激活。 - daveywc

41

使用IIS8的Windows 8

  • 按下 Windows+X
  • 选择程序和功能(列表中的第一项)
  • 选择左侧的打开或关闭Windows功能
  • 展开.NET Framework 4.5高级服务
  • 展开WCF服务
  • 启用HTTP激活

有没有任何 PowerShell 脚本可以以编程方式完成这个任务? - Kiquenet
我们只有一台服务器,所以我从来没有使用过高级 Powershell。 - Simon_Weaver

28

现在我更喜欢通过脚本来完成这件事

REM install the needed Windows IIS features for WCF
dism /Online /Enable-Feature /FeatureName:WAS-WindowsActivationService
dism /Online /Enable-Feature /FeatureName:WAS-ProcessModel
dism /Online /Enable-Feature /FeatureName:WAS-NetFxEnvironment
dism /Online /Enable-Feature /FeatureName:WAS-ConfigurationAPI
dism /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation
dism /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation45

REM Feature Install Complete
pause

2
感谢dism /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation dism /Online /Enable-Feature /FeatureName:WCF-HTTP-Activation45,对我来说已足够... - Shubh
这是在新的2012R2+版本的Windows Server上修复此问题的最佳方法。可能在2012年也适用,但幸运的是,我没有更多的机器可以尝试这个方法。 - Paul Sturm
使用 PowerShell 脚本? - Kiquenet
@Kiquenet 这些命令都可以在PowerShell中使用。如果您尝试直接复制Shubh的命令,则需要在第一个dism命令之后添加换行符或分号,然后再输入第二个命令。 - Keith Banner

10

我们成功地解决了在Windows Server 2012下的错误,方法如下:

  1. 从“删除角色和功能向导”中删除.NET Framework 4.5特性/ASP.NET 4.5及其所有相关特性。
  2. 重新安装已删除的特性。

看起来安装顺序是问题的原因。

此外,请确保在WCF服务下安装了HTTP激活。


我做了这件事,似乎把我的服务器搞挂了。我只是卸载了IIS下的ASP.NET组件,但现在当我远程登录时,我只能看到一个黑屏和一个命令提示窗口,就像服务器现在只剩下“服务器核心”一样... :( - MGOwen
@MGOwen 当您删除一些 .net 4.5 的功能时,似乎也会删除服务器图形外壳,但可以通过一些命令再次添加。 - John

3

使用PowerShell,您可以通过以下命令安装所需特性:

Add-WindowsFeature 'NET-HTTP-Activation'

3
对于Windows 8机器,没有“服务器管理器”应用程序(至少我找不到它)。
尽管我能够解决问题,但我不确定我执行以下操作的顺序,但看起来下列一个/几个操作有所帮助:
1. 在“打开或关闭Windows功能”中打开以下选项:a) .Net Framework 3.5 - WCF HTTP激活和非HTTP激活b) 所有WCF服务(如本问题的一个答案所指定的那样) 2. 在“%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\”文件夹中执行“ServiceModelReg.exe –i” 3. 通过两个命令在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727文件夹中注册ASP.NET 2.0: aspnet_regiis -ga "NT AUTHORITY\NETWORK SERVICE" aspnet_regiis -iru 4. 重新启动PC...似乎由于步骤#3和#4的结果,在我的ASP.NET配置中出现了一些问题 5. 重复执行动作#2 6. 从“程序和功能”安装另外两个选项:.Net Framework 4.5高级服务。我检查了两个子选项:ASP.NET 4.5和WCF服务 7. 重新启动应用程序池
顺序有点疯狂,但这对我有所帮助,可能也会对其他人有所帮助。

关键部分是启用HTTP激活。 - Umar Farooq Khawaja
关于http://gyorgybalassy.wordpress.com/2012/09/24/publishing-a-wcf-service-on-iis8,有什么问题吗? - Kiquenet

2
在Windows 8或Windows Server 2012上配置IIS 8时,安装顺序非常重要。
我在配置IIS 8时遇到了很多问题,但最终这些链接帮助了我:

2
在Windows 10(客户端)上,您也可以使用脚本来完成此操作。
Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName WCF-HTTP-Activation45 -All

请注意,这是与服务器 SKU 不同的命令。

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