C# WCF服务在方法请求上返回404
我有一个WCF服务页面,只在SSL上运行WebGets/WebInvokes——它在我的本地机器上运行良好(自签名证书)。但是,在生产环境中,我可以访问service.svc(它会告诉我如何使用),但是service.svc/AnyRequest返回404。这两个环境都托管在IIS 7.5中 我已经启用了跟踪,服务甚至没有接收任何方法请求(例如service.svc/SomeRequest),但是它正在处理C# WCF服务在方法请求上返回404,c#,wcf,ssl,iis-7.5,C#,Wcf,Ssl,Iis 7.5,我有一个WCF服务页面,只在SSL上运行WebGets/WebInvokes——它在我的本地机器上运行良好(自签名证书)。但是,在生产环境中,我可以访问service.svc(它会告诉我如何使用),但是service.svc/AnyRequest返回404。这两个环境都托管在IIS 7.5中 我已经启用了跟踪,服务甚至没有接收任何方法请求(例如service.svc/SomeRequest),但是它正在处理service.svc很好。它还在收听https://computername.domai
service.svc
很好。它还在收听https://computername.domain.net/path/service.svc
-这正常吗?它通常应该指向https://publicfacing.com/path/service.svc
还请注意,生产服务器在IIS中承载多个站点
下面是my web.config的system.serviceModel部分。SSLBehave是由以下人员建议的
我会先检查一些东西
- 托管目录的权限
- .Net版本是否正确
- 您是否已将证书添加到站点
- 尝试将图像放在同一路径中,您能导航到该路径吗(排除偶尔出现的奇怪路径映射)
祝你好运 我也有同样的问题。据我所知,WCF在默认情况下不是经过身份验证的授权(或与HTTPContext兼容) 我必须将其添加到WCF服务web.config的配置文件的以下部分:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
这解决了我的问题。您可以使用WsHttp绑定实现传输级安全性。看见在您的绑定中,请尝试以下出价:
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
文章提到应该将绑定与端点绑定。正如你提到的,你可以通过.svc扩展名
service.svc
访问你的服务,但不能使用REST格式service.svc/AnyRequest
,问题一定出在这里
将此添加到您的web.config
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<handlers>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/>
</handlers>
</system.webServer>
.也许在RouteConfig.cs文件中添加以下行:
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
只要您的.svc文件位于应用程序的根目录中。每当我使用新开发的WCF Web服务访问404时,我要做的第一件事就是检查解释此类调用所需的处理程序映射,因为这通常是问题的原因。有几种方法可以解决此问题,其中许多方法需要手动执行ServiceModelReg.exe
console命令:这些无疑是有效的过程,但如果您的开发机器具有特别复杂的配置,则也可能不起作用或产生其他问题。我在下面提出的解决方法的时间稍微长一些,但其优点是可以更安全地解决问题
- 打开服务器管理器界面进行机器管理,通常出现在任务栏和开始菜单中
- 转到仪表板(或控制面板)并选择添加角色或功能以打开向导
- 选择基于角色或基于功能的安装类型以及要使用的服务器,即本地/本地服务器
- 转到功能部分:到达该部分后,展开.NET Framework 3.5功能节点和/或.NET Framework 4.5功能节点,具体取决于您安装的内容:如果您同时安装了这两个功能,则应执行以下步骤两次(针对每一个功能)
- 展开WCF服务部分(如果可用),然后选择HTTP激活(见下面的屏幕截图)
- 继续,直到完成向导,然后单击安装
一旦安装完成,您应该能够运行WCF服务,而不会再次出现404错误
有关此特定问题以及如何解决此问题的其他信息,您也可以访问我的博客。要帮助其他人解决此问题,可能是您的服务名称不是,必须是。web.config中的以下设置修复了HTTPS网站上的WCF.svc 404:
<webHttpBinding>
<!-- https -->
<security mode="Transport">
<transport clientCredentialType = "None" proxyCredentialType="None"/>
</security>
</binding>
</webHttpBinding>
我尝试了上述解决方案,安装了WCF服务,确保API目录中有适当的权限,以及其他一些事情
虽然其中有些是问题,但我有一个问题上面没有提到
如果对整个服务器或给定站点启用了请求筛选,请确保.svc是受信任的文件扩展名,否则它将被阻止。转到IIS>请求筛选。单击“编辑要素设置”。检查是否选中了“允许未列出的文件扩展名”。如果是,请确保列表中有.svc的条目。否则,IIS将阻止提供该文件。如果在本地调用该服务,该服务是否有效?@theusguy否定,仍然返回404。如果您的问题仍然存在,我的回答可能会对您有所帮助。虽然这并不能解决我的问题,但对于任何正在搜索解决方案的人来说,这些都是最好的选择。享受赏金。:)ElatedOwl,如果你解决了这个问题,请发布你的答案。对于任何发现这个问题的人,我都有一个类似的问题,下面是我的问题,并附上解决方案:当你尝试直接从MVC应用程序调用WCF服务时,这个答案非常有用。我收到jquery post请求的404-未找到错误。现在解决了,这对我有帮助。:)嘿,我在WCF.config文件中添加了标记,在服务中也添加了属性,正如你所说的,但当我遇到错误和交叉浏览错误时,仍然是这样。非常有用。我厌倦了探索一切
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
<webHttpBinding>
<!-- https -->
<security mode="Transport">
<transport clientCredentialType = "None" proxyCredentialType="None"/>
</security>
</binding>
</webHttpBinding>