在 IIS 中访问 .svc 文件时出现 HTTP 404
Posted
技术标签:
【中文标题】在 IIS 中访问 .svc 文件时出现 HTTP 404【英文标题】:HTTP 404 when accessing .svc file in IIS 【发布时间】:2011-02-06 06:03:51 【问题描述】:我最近创建了一个 WCF 服务,在 Visual Studio 2008 测试时工作正常。但是当我将项目部署到 IIS 并尝试从 IIS 访问 .svc 文件时,我收到此错误:
"Server Error in '/' Application.The resource cannot be found. "
过去 4 天我一直有这个问题。
在 IIS 管理器的处理程序映射中,我可以看到 .svc 的两个条目:
svc-Integrated and svc-ISAPI-2.0
【问题讨论】:
【参考方案1】:什么对我有用,在 Windows 2012 Server R2 上:
感谢“Aaron D”
【讨论】:
迄今为止最简单的选择。 这在 Win10、Win8.1 桌面和 Win2012 服务器上对我有用 :) 谢谢! 出于某种原因,我不得不为 3.5 和 4.5 安装该功能,并通过命令行:dism /online /enable-feature /featurename:WCF-http-Activation45 /all
和 dism /online /enable-feature /featurename:WCF-http-Activation /all
也适用于 Sever 2019
@Rocklan 给出的dism 命令运行良好!【参考方案2】:
您需要为 SVC 扩展添加到 ASP.NET 的映射。最简单的方法是从 C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation 运行 ServiceModelReg.exe -i
。如果您还没有启用 ASP.NET,您可能还需要启用。
如果您使用的是 Windows Server 2012 或 2016,请按照以下说明操作:
WCF on IIS8; *.svc handler mapping doesn't work【讨论】:
之后您是否尝试重新启动 IIS? 您现在有 .svc 的 mime 映射吗? 这不是 mime 映射 - 应用程序扩展映射。见msdn.microsoft.com/en-us/library/ms752252(v=vs.90).aspx。 重要提示:不要在安装了 .NET 4.5 的 Server 2012 上执行此操作。它把我搞砸了,直到我运行 ServiceModelReg.exe -ua。有关 Server 2012 解决方案的信息,请参见此处:***.com/questions/11116134/…【参考方案3】:我发现these instructions on a blog post 表明了这个步骤,它对我有用(Windows 8、64 位):
确保在 Windows 功能中,您已勾选 .Net 框架下的两个 WCF 选项。因此,请转到控制面板 -> 程序和功能 -> 打开/关闭 Windows 功能 -> 功能 -> 添加功能 -> .NET Framework X.X 功能。确保 .Net 框架说它已安装,并确保它下面的 WCF 激活节点被选中(勾选复选框)并且 WCF 激活下的两个选项也被选中。这些是: * HTTP 激活 * 非 HTTP 激活 两个选项都需要选择(勾选复选框)。
【讨论】:
如果我能不止一次地对此表示赞同,这让我发疯了,干杯!【参考方案4】:我看到你已经解决了你的问题 - 但为了后代:
我们遇到了类似的问题,并且 SVC 处理程序已正确安装。我们的问题是 ExtensionlessUrl 处理程序在请求到达 SVC 处理程序之前对其进行处理。
要检查这一点 - 在 Web 服务器级别的 IIS 管理器的处理程序映射中,按顺序查看处理程序列表(这是右侧的一个选项)。如果各种 ExtensionlessUrl 处理程序出现在 SVC 处理程序上方,则反复将它们向下移动,直到它们位于底部。
【讨论】:
【参考方案5】:以上解决方案都没有为我解决此错误。我必须在 web.config 中设置以下内容:
system.servicemodel > bindings > webHttpBinding > binding:
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
我想借此机会再次诅咒 Microsoft,因为它在 .NET Framework 上造成了如此巨大的混乱,并使开发人员的生活如此悲惨!
【讨论】:
我会为此喝一杯!微软对 WCF 配置疯狂问题的解决方案是在 .NET Core 中杀死该产品。 我已经搬到 Go 并且永远不会回去了。如果您曾经使用过经典的 ASP,那么它很简单,而且工作时不会出现问题或等待 .NET JIT 延迟编译网页。 Go也超级快!感觉就像运行一个静态网站。 Rust 怎么样?听到了好事,但也听到了一些可怕的事情,例如代码膨胀和虚假安全。 我也看过 Rust。它现在变得非常流行,尤其是通过 WebAssembly 在浏览器中运行(快疯了!见arewewebyet.org),但对我来说,学习曲线比 Go 高得多。实际上,我在几天内就学会了 Go,而且它在运行时和编译项目时都非常快。这两种语言都比基于 JIT 的编译器(如 .NET 和 JVM)领先光年。【参考方案6】:验证您的目录是否已转换为应用程序是您的 IIS。
【讨论】:
【参考方案7】:我今天也遇到了同样的问题。
对我来说,解决方案是进入 IIS,右键单击新网站名称,选择属性,ASP.Net,然后将 ASP.Net 版本从“1.1.4322”(它设置为默认)到 2.0.50727。
完成后,我可以右键单击 .svc 文件,单击“浏览”并查看友好的服务网页。
【讨论】:
【参考方案8】:在 Windows 10 中启用 IIS 6 管理兼容性后,这也可能成为问题。在 WCF 服务下设置框架 HTTP 激活将解决该问题。
【讨论】:
【参考方案9】:在我的情况下,错误是由文件 applicationhost.config (\System32\inetsrv\config) 中的映射设置不正确引起的。出于某种原因,Visual Studio 2013 在 IIS 中创建虚拟目录时损坏了它。修复是手动编辑文件中的站点部分。
【讨论】:
【参考方案10】:2012 server 2012 add role/ features 中的 features 下给出了 2 个 .net framework 版本
一个。 3.5
b. 4.5
根据使用的框架,您可以在 WCF 服务下启用HTTP-Activation。 :)
【讨论】:
【参考方案11】:在我的情况下,Win 10。文件 applicationHost.config 已被 VS 2012 损坏。您可以在 C:\inetpub\history 下获取此文件的历史记录。然后重新启动IIS,它就可以正常工作了。
【讨论】:
【参考方案12】:我必须在请求过滤设置中将扩展名 .svc 添加到允许的扩展名中(之前出现 404.7 错误)。
【讨论】:
【参考方案13】:在请求过滤中添加 .svc 后缀对我有用。
【讨论】:
以上是关于在 IIS 中访问 .svc 文件时出现 HTTP 404的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 错误 500.19 - 在 IIS 上托管时出现内部服务器错误 [重复]