Share via


System.Web.Routing 統合

Windows Communication Foundation (WCF) サービスをインターネット インフォメーション サービス (IIS) でホストするときは、.svc ファイルを仮想ディレクトリに配置します。この .svc ファイルは、使用するサービス ホスト ファクトリと、サービスを実装するクラスを指定します。サービスを要求するときは、https://contoso.com/EmployeeServce.svc などの URI で .svc ファイルを指定します。REST サービスを記述するプログラマにとっては、この種類の URI は最適とは言えません。REST サービス用の URI は、特定のリソースを指定しており、拡張子がないのが普通です。System.Web.Routing 統合機能では、拡張子のない URI に応答する WCF REST サービスをホストできます。ルーティング詳細情報、「ルーティング」を参照してください。

N:System.Web.Routing 統合の使用

System.Web.Routing 統合機能を使用するには、ServiceRoute クラスを使用して 1 つ以上のルートを作成し、Global.asax ファイルでそれらを RouteTable に追加します。これらのルートは、サービスが応答する相対 URI を指定します。その方法を次の例に示します。

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.ServiceModel.Activation" %>
<%@ Import Namespace="System.ServiceModel.Web " %>

<script RunAt="server">
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    private void RegisterRoutes(RouteCollection routes)
    {
        routes.Add(new ServiceRoute("Customers", new WebServiceHostFactory(), typeof(Service))); 
   }
</script>

これは、Customers で始まる相対 URI が指定されたすべての要求を Service サービスにルーティングします。

Web.config ファイルでは、次の例に示すように、System.Web.Routing.UrlRoutingModule モジュールを追加し、runAllManagedModulesForAllRequests 属性を true に設定し、UrlRoutingHandler ハンドラーを <system.webServer> 要素に追加する必要があります。

<system.webServer>
      <modules runAllManagedModulesForAllRequests="true">
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </modules>
      <handlers>
        <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/>
      </handlers>
    </system.webServer>

これで、ルーティングに必要なモジュールとハンドラーが読み込まれます。詳細については、次のトピックを参照してください。 ルーティング.また、次の例に示すように、<serviceHostingEnvironment> 要素で aspNetCompatibilityEnabled 属性を true に設定する必要もあります。

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
        <!-- ... -->
    </system.serviceModel>

次の例に示すように、このサービスを実装するクラスでは、ASP.NET 互換要件を有効にする必要があります。

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service
    {
        // ...
    }

参照

概念

ルーティング

その他のリソース

WCF Web HTTP プログラミング モデル