繁体   English   中英

在IIS6中启用通配符映射时,WCF方法返回404

[英]WCF Methods Return 404 When Wildcard Mapping Is Enabled In IIS6

我有一个REST WCF服务,定义如下:

[ServiceContract]
public interface IRest {
    [OperationContract]
    [WebGet(UriTemplate = "/test")]
    int Test();
}

使用以下web.config:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="ServiceX.RestBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="ServiceX.RestBehavior">
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <serviceHostingEnvironment aspNetCompatibilityEnabled="false" />

  <services>
    <service behaviorConfiguration="ServiceX.RestBehavior"
      name="ServiceX.Rest">
      <endpoint address="" behaviorConfiguration="ServiceX.RestBehavior"
        binding="webHttpBinding" contract="ServiceX.IRest" />
    </service>
  </services>
</system.serviceModel>

没有通配符映射,一切都可以正常工作; 我可以浏览到“ /services/rest.svc/test”,然后会收到预期的结果。

但是,一旦启用通配符映射(。*> C:\\ WINDOWS \\ Microsoft.NET \\ Framework \\ v2.0.50727 \\ aspnet_isapi.dll),当我尝试访问方法时,我便开始接收404(尽管我仍然可以查看“ /services/rest.svc”)。

有任何想法吗? 我已经用尽了Google和StackOverflow。 似乎没有人分享这个问题:(

编辑:您都可以通过在VS2008中创建新的WCF服务(新项目> WCF服务应用程序)来重现此内容。 浏览到虚拟方法('GetData')...,您会注意到它返回400 ...这很好,因为它表明它仍在转发到WCF。 但是,如果在IIS6中启用了通配符映射,则现在将获得404,这意味着WCF不再拦截该请求。

我在IIS6上运行WCF服务时遇到了同样的问题。

我可以在http://someurl/service.svc上浏览服务,但是在服务上单击诸如http://someurl/service.svc/somemethod之类的方法时会得到404。

就我而言,修复很容易。 .svc文件类型在IIS中配置为由C:\\ Windows \\ Microsoft.NET \\ Framework \\ v2.0.50727 \\ aspnet_isapi.dll处理,但是我的服务在ASP.NET v4.0 apppool中运行,所以我只是指出要由C:\\ Windows \\ Microsoft.NET \\ Framework \\ v4.0.30319 \\ aspnet_isapi.dll处理的.svc文件类型

在您指定通配符映射路径的弹出对话框中,有一个复选框名为“验证该文件存在”的设置。 此设置需要关闭。

如果未关闭,则会显示404(找不到页面)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM