次のように定義された 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を使い果たしました。誰もこの問題を共有していないようです:(
EDIT: VS2008で新しいWCFサービスを作成することで、これをすべて再現できます(新しいプロジェクト> WCFサービスアプリケーション)。ダミー メソッド ('GetData') を参照すると、400 が返されます。これは、まだ WCF に転送中であることを示しているため問題ありません。ただし、 IIS6 でワイルドカード マッピングを有効にすると、404 が返されます。これは、WCF が要求をインターセプトしなくなったことを意味します。