2013-04-26 128 views
15

我有一个WCF服务页面只能通过SSL运行WebGets/WebInvokes - 它在我的本地机器(自签名证书)上正常工作。然而,在生产时,我可以访问service.svc(并且它提供了有关如何使用的消息),但service.svc/AnyRequest返回404。这两个环境都在IIS 7.5中承载。方法请求返回404的WCF服务

我已经启用跟踪和服务甚至没有拿起任何方法请求(例如service.svc/SomeRequest),但它正在处理service.svc就好。它也在收听https://computername.domain.net/path/service.svc - 这是正常的吗?它通常应该指向https://publicfacing.com/path/service.svc

另请注意,生产服务器托管IIS中的多个站点。

下面是我的web.config的system.serviceModel部分。 SSLBehave建议从here

<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> 
+0

服务是否在本地调用时工作? – theusguy 2013-05-02 01:54:44

+0

@theusguy否定,仍然返回404. – Snuffleupagus 2013-05-02 15:28:33

+0

如果您的问题仍然存在,我的答案可能会帮助您 – 2013-05-06 05:42:52

回答

9

我会先检查一些东西;

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

祝你好运!

+0

虽然这并没有解决我的问题,但其中大部分是寻求解决方案的人最好的选择。享受赏金。 :) – Snuffleupagus 2013-05-06 02:34:46

+2

ElatedOwl,如果你解决了这个问题,请张贴你的答案。 – MGOwen 2014-10-23 23:20:30

+1

任何人发现这一点,我有一个类似的问题,这里是我的问题,完成**解决方案**:http://stackoverflow.com/questions/26398049 – MGOwen 2014-10-23 23:21:27

5

我有同样的问题。从我读到的,默认情况下,WCF不是NT Authenticated授权(或HTTPContext兼容)。

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

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

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

与实际服务类definiation我不得不补充:

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

这解决了我的问题。

+0

嘿,我在WCF.config文件中添加标签和属性服务为你告诉,但仍然当我得到错误和跨浏览错误。 – user3217843 2017-02-09 05:34:21

5

您可以使用WsHttp绑定实现传输级别安全性。见this article;在你的绑定尝试这个同伴:

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

该文章提到你应该绑定与结束点的绑定。

4

正如您所提到的,您可以通过.svc扩展service.svc访问您的服务,但不能以REST格式service.svc/AnyRequest访问,问题必须在routing integration

添加到您的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此错误的原因必须是SVC extention的Check that file exists设置,确保“检查文件是否存在没有被选中。”欲了解更多信息,请参阅IIS Hosted Service Fails

5

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

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

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

+0

当您尝试直接从MVC App调用“WCF服务”时,此答案非常有用。我得到了'404 - 未找到错误'为jquery post请求。现在解决了,这帮助了我。:) – RajeshKdev 2015-07-21 09:37:04

1

当我用新开发的WCF Web服务打404时,我会做的第一件事是检查解释这种类型的调用所需的处理程序映射,因为它通常是问题的原因。解决此问题的方法有很多,其中许多方法需要手动执行控制台命令:这些无疑是有效的过程,但如果开发计算机配置特别复杂,也可能无法工作 - 或者会产生其他问题。我在下面提出的解决方法稍微延长一点,但具有更安全可靠地解决问题的优点。

  • 打开服务器管理器接口机管理,通常同时存在于任务栏开始菜单
  • 转至仪表板并选择添加角色或功能以打开向导。
  • 选择基于角色或基于功能的安装类型以及要处理的服务器,即本地/本地服务器。
  • 转到特点部:从前有,扩大.NET Framework 3.5的特点节点和/或.NET Framework 3.5的特点节点,这取决于你所安装的:如果你有两个,你应执行以下步骤两次(针对其中的每一个)。
  • 展开WCF服务部分(如果可用),然后选择HTTP激活(请参见下面的屏幕截图)。
  • 继续操作直至完成向导,然后单击安装

enter image description here

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

有关此特定问题以及如何解决该问题的其他信息,还可以使用read the following post