我有一个 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 不再拦截请求。