WCF服务的方法请求返回404(WCF service returning 404 on metho

2019-09-01 05:47发布

我有一个WCF服务页面只运行WebGets / WebInvokes通过SSL - 它工作得很好我的本地机器(自签名证书)上。 在生产,但是,我可以达到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中多个站点。

下面是我的web.config的system.serviceModel部分。 该SSLBehave从建议在这里 。

  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="TransportSecurity">
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="SSLBehave">
          <useRequestHeadersForMetadataAddress>
            <defaultPorts>
              <add scheme="https" port="443"/>
            </defaultPorts>
          </useRequestHeadersForMetadataAddress>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="UserManagement.ajaxAspNetAjaxBehavior">
          <webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Wrapped" />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="UserManagement.ajax" behaviorConfiguration="SSLBehave">
        <endpoint address="" behaviorConfiguration="UserManagement.ajaxAspNetAjaxBehavior"
          binding="webHttpBinding" bindingConfiguration="TransportSecurity" contract="UserManagement.ajax" />
      </service>
    </services>
  </system.serviceModel>

Answer 1:

我会通过检查一些事情开始;

  • 在托管目录权限?
  • .NET版本是正确的?
  • 您已经添加了证书的网站?
  • 尝试把图像在同一路径下,就可以导航到(排除奇偶尔路径映射)

祝好运!



Answer 2:

我要做的第一件事,每当我击中一个新开发的WCF Web服务的检查,以解释这种类型的呼叫所需的处理程序映射404,因为它往往是问题的原因。 有几种方法可以解决这个问题,其中许多需要的手动执行ServiceModelReg.exe控制台命令:这些无疑是有效的方法,但也可能无法正常工作-或创建额外的问题-如果你的开发机器有一个特别复杂的配置。 分辨率方法我下面提出稍长拉断,但有更多的安全和可靠地解决问题的优势。

  • 打开机管理服务器管理器界面,通常存在于任务栏开始菜单
  • 转到信息中心 ,并选择添加角色或功能来打开向导。
  • 选择基于角色的或基于功能的安装类型 ,你想工作的服务器,也就是你的本地/本地服务器。
  • 功能部分:一旦出现,扩大了.NET Framework 3.5的功能节点和/或.NET Framework 3.5功能节点,这取决于你所安装的:如果你有两个,你应该两次执行以下步骤(每个其中之一)。
  • 展开WCF服务部分(如果有的话),然后选择HTTP激活 (见下图)。
  • 继续下去,直到完成向导,然后单击安装

一旦安装完成后,你应该能够在没有404错误以后再招致运行WCF服务。

有关此特定问题的其他信息,以及如何解决它,你也可以看到这篇文章在我的博客。



Answer 3:

我有同样的问题。 从我读,WCF默认心不是NT验证的授权(或HttpContext的兼容)。

我不得不把它添加到在部分WCF服务的web.config我的配置文件:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

你做到了,再加上这样的:

而在实际的服务类definiation我不得不添加:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class DataService : IDataDeliveryServiceContract

这个固定我的问题。



Answer 4:

您可以使用WsHttp绑定实现传输层安全性。 请参阅这篇文章 ; 在您的绑定试试这个招标改为:

<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>

文中提到,你应该绑绑定与终点。



Answer 5:

也许在你的RouteConfig.cs文件中加入这一行:

routes.IgnoreRoute("{resource}.svc/{*pathInfo}");

只要您的.svc文件是在应用程序的根。



Answer 6:

正如你提到的,你可以通过.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> 

在IIS 6此错误的原因必须Check that file exists SVC extention的设置,确保“检查文件是否存在没有被选中。” 欲了解更多信息,请参阅IIS托管服务失败 。



Answer 7:

为了帮助其他人发现自己套牢这一点-这可能是您的服务名称是不完全合格的名称 ,它必须是。



文章来源: WCF service returning 404 on method requests
标签: c# wcf ssl iis-7.5