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
{
// ...
}