Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务在方法请求上返回404_C#_Wcf_Ssl_Iis 7.5 - Fatal编程技术网

C# WCF服务在方法请求上返回404

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

我有一个WCF服务页面,只在SSL上运行WebGets/WebInvokes——它在我的本地机器上运行良好(自签名证书)。但是,在生产环境中,我可以访问service.svc(它会告诉我如何使用),但是service.svc/AnyRequest返回404。这两个环境都托管在IIS 7.5中

我已经启用了跟踪,服务甚至没有接收任何方法请求(例如service.svc/SomeRequest),但是它正在处理
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>