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

时间:2010-11-05 18:10:18

标签: c# asp.net wcf wildcard-mapping

我的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',我会收到预期的结果。

但是,只要我启用通配符映射(。*&gt; C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll),我就会在尝试访问方法时开始接收404(虽然我仍然可以查看'/services/rest.svc')。

有什么想法吗?我已经筋疲力尽了谷歌和StackOverflow。似乎没有人分享这个问题:(

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

2 个答案:

答案 0 :(得分:1)

我在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中运行,所以我只是指出.svc文件类型由C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll

处理

答案 1 :(得分:0)

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

如果没有关闭,您将获得404(未找到页面)