1

ワイルドカード マッピングが有効なときに IIS6 で WCF メソッドを実行すると、404 が返されます。

これは、VS2008 で新しい WCF サービスを作成することで再現できます (新しいプロジェクト > WCF サービス アプリケーション)。ダミー メソッド ('GetData') を参照すると、400 が返されます。これは、まだ WCF に転送中であることを示しているため問題ありません。

ただし、IIS6 でワイルドカード マッピングを有効にすると、404 が返されます。これは、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を使い果たしました:(

4

1 に答える 1

3

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アプリプールで実行されていたため、単純にC:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319\aspnet_isapi.dllによって処理される.svcファイルタイプを指定しました

于 2011-03-01T10:07:31.017 に答える