在 Windows Server 2008(64 位)上浏览 wcf 服务时出现 HTTP 错误 404.3 - Not Found”

Posted

技术标签:

【中文标题】在 Windows Server 2008(64 位)上浏览 wcf 服务时出现 HTTP 错误 404.3 - Not Found”【英文标题】:HTTP Error 404.3 - Not Found" while browsing wcf service on Windows Server 2008(64bit) 【发布时间】:2011-03-17 12:21:25 【问题描述】:

我正在开发一个基于 .Net Framework 3.5 sp1 并托管在 windows server 2008(64bit) 上的应用程序。

在本地浏览 wcf 服务 (.svc) 时一切正常,但在使用完整域 URL 浏览时出现错误。

本地地址是这样的:http://localhost/MyService.svc

域名地址是这样的:http://MySite.ir/MyService.svc

顺便说一下,页面 (.aspx) 和其他文件在本地主机和域地址上都能正常工作。

任何想法将不胜感激

这里是详细的错误:


HTTP 错误 404.3 - 未找到

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

模块:StaticFileModule

通知:ExecuteRequestHandler

处理程序:静态文件

错误代码:0x80070032

请求的网址:http://MySite.ir:80/MyService.svc

物理路径:D:\inetpub\vhosts\MySite.ir\httpdocs\MyService.svc

登录方式:匿名

登录用户匿名

【问题讨论】:

【参考方案1】:

请确保您已从 here 激活 WCF 组件。

或者另一种简单的方法是,转到控制面板 -> 打开或关闭 Windows 功能 -> 并确保您已勾选以下屏幕截图中提到的所有选项。

您可能需要激活每个框并接受,以防在一次激活所有功能时出错

【讨论】:

.Net Framework 4.5 高级服务 -> 检查 WCF 服务和 -> HTTP 激活为我做了! Windows Server 2012 - 只需要激活 HTTP 并检查端口共享。 我会在此响应中添加一个一个激活框。同一时间的所有检查都可能失败。它发生在 Windows Server 2012 中。 这个答案应该在顶部 这是正确答案。这为我解决了这个问题,我不必手动将任何内容手动添加到 IIS 处理程序映射中。【参考方案2】:

好的,答案如下:

转到处理程序映射 | 添加处理程序管理器 --> 然后添加以下信息

请求路径:*.svc

类型:System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

名称:svc-Integrated

【讨论】:

对于任何想要将其添加到 web.config 文件的人,这对我来说适用于 .NET 4.5 项目: 对我来说,将 @StefanMohr 中的行添加到 Web.config 并不太奏效。但是,我更改了path="*.svc"verb="*",效果很好。因此,我使用的行是:<add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>(添加到配置/system.webServer/handlers)。【参考方案3】:

如果有人在 Windows Server 2012 上遇到此问题,Bill Moon 的回答 here 为我解决了这个问题:

“对于 Windows Server 2012...从服务器管理器中,单击添加角色和功能,选择适当的服务器,然后选择功能。在 .NET Framework 4.5 功能下,您将看到 WCF 服务,在其下,你会发现 HTTP 激活。”

【讨论】:

在任何现有的 Web 应用程序中,添加 Windows 功能后,您还必须执行以下操作: - 启动 inetmgr - 打开“处理程序映射” - 检查扩展 *.svc 的 svc-ISAPI 映射是否为展示。如果没有,请使用“还原为父级”操作从父级网站复制它们。请注意,这假定在 web.config 中为应用程序配置了自定义处理程序映射,这在 IIS7+ 中通常是这种情况。如果没有,你会在执行“Revert To Parent”时丢失那些。【参考方案4】:

我的笔记本电脑中有 Windows 10,并使用 Visual Studio 2015 进行 WCF 开发。 WCF 在 Visual Studio 中运行良好,但在 IIS 中托管时出现同样的错误。

我检查了 IIS 处理程序。 svc 扩展丢失。所以我尝试按照 Mori 在第一个答案中的建议在 IIS 中添加新的处理程序。我没有找到类型“System.ServiceModel.Activation.HttpHandler”。

所以我打开了“打开或关闭 Windows 功能”并安装了屏幕截图中突出显示的功能。

这对我有用。

【讨论】:

【参考方案5】:

如果您使用的是 .Net 4.x,则 PublicKeyToken 为 31bf3856ad364e35。

但是,在 this post 关于在 IIS 中正确安装 WCF 服务之后,为我设置了处理程序。

【讨论】:

【参考方案6】:

我想将此作为评论添加到答案中,但没有足够的代表。我尝试使用各种标志运行 ServiceModelReg 和 aspnet_regiis.exe 并添加了 HTTP 激活功能,但它仍然无法正常工作。即使在 IIS 中使用 Handler 映射 UI 也不起作用,因为它找不到 System.ServiceModel.Activation.HttpHandler。最终奏效的是将 Mori 提到的处理程序手动添加到我的 web.config 文件中。

<system.webServer>
    <handlers>
      <add name="svc-Integrated" path="*.svc" verb="GET,HEAD,POST,DEBUG" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" modules="ManagedPipelineHandler" scriptProcessor="" resourceType="Unspecified" requireAccess="Script" allowPathInfo="false" preCondition="integratedMode" responseBufferLimit="4194304" />

我的项目在 Windows 7 上运行 .Net 3.5 和 IIS 7.5,在 Win Server 2008 R2 上运行 IIS 7.0。

【讨论】:

【参考方案7】:

尝试从“打开或关闭 Windows 功能”窗口 (See here) 中取消选中 WCF HTTP 激活,然后转到

重新安装
%windir%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\

并执行ServiceModelReg -i

【讨论】:

知道如何在 Windows Server 2012 及更高版本上执行此魔法吗? “Windows 功能”只是打开服务器管理器,没有包含这些功能的角色,我可以在 2012 OR 2016 OR 2019 中找到!

以上是关于在 Windows Server 2008(64 位)上浏览 wcf 服务时出现 HTTP 错误 404.3 - Not Found”的主要内容,如果未能解决你的问题,请参考以下文章

windows server 2008下装SQL 2008R2x64

在 MFC CPropertySheet 中添加 ActiveX 控件的问题(Windows 7 64 位和 Windows 2008 Server)

windows server2012R2 64位系统中安装SQL server2008 32位最大使用内存是多少?

Windows 服务在从 3.5 迁移的 Windows Server 2008、x64、.NET 4 上引发 System.BadImageFormatException

windows server2008 64位系统突然乱码

Windows Server 2008 x 64 下访问 paradox db 文件的权限