さて、参考にしたのは、10 行でズバリ!! REST サービスの作成 (C#)。この記事の一番最後に載っていた、WCF REST Starter Kitを使って、サンプルを作ってみた。
VS2010でプロジェクトを作るだけで、Hello Worldは簡単に作成完了。デバッグ実行も普通に動き、http://localhost:port/Service1/でアクセスしたら、[WebGet(UriTemplate = "")]で指定されたメソッドが実行された。
後は、これをデプロイするためにパッケージを作成する。IISのhttp://machine_name/testにデプロイするための設定。プロジェクトを右クリック、[パッケージ化/発行の設定]を選ぶ。[対象サーバーで使用する IIS Web サイト/アプリケーション名]でデフォルトの"Default Web Site/WcfRestService1_deploy" から "/lm/w3svc/1/ROOT/test"に変更。再びプロジェクトを右クリックし、[配置パッケージの作成]を選び、パッケージ及びデプロイコマンドが生成された。
とここまでは、簡単にいったものの、実際にデプロイしようとしたらおおはまり。まず、Windows XPに.net Framework 4.0をインストール。そして、デプロイコマンドを叩くと、deploytoolがインストールされていないと怒られたので、deploy toolをインストール。デプロイはうまくいったものの、アクセスしても403または404。いろいろ調べ、svcがIISに関連づけられていないとの情報を得たため、
%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe /i /x
を実行(最終的にこれが必要だったかどうかは不明)。それでも変わらず。
いろいろ調べてみると、WCF REST Starter Kitでは、svcファイルは使わずに、Fileless Activationという仕組みを使っているようだ。これは、web.configの設定とコードのみで、Web Serviceの設定を行うもの。http://sankarsan.wordpress.com/2010/06/06/fileless-activation-of-wcf-service-in-net-4-0/に詳しく載っている。
実際にコードを見ると、Global.asax.csに
// Edit the base address of Service1 by replacing the "Service1" string below
RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));
とあり、ここでbindingをしていることがわかる。さてここで、web.configにUrlRoutingの設定をする必要があるのだが、デフォルトでは、IIS7.0用の設定になっているため、IIS5.1では動かない。とりあえず、6.0用の設定に書き換えてみたものの、変わらず。
もっと調べてみると、このUrlRoutingを行うためには、IISにモジュールを入れないといけないそうな。そして、それをIIS5.1で入れる方法はさっぱりわからない。
というわけで、このFileless Activationは断念。WCF REST Starter Kitではなく、普通にWCFサービスから作成することにした。
結局やったのは、10 行でズバリ!! REST サービスの作成 (C#)に書かれている事をそのまま。動かしてみたらIIS5.1でもhttp://localhost/WcfService1/OrderService.svc/orders/3 にアクセスしたらあっさり動いた。最初から、この方法でやっておけば・・・