在 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