しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

IIS Express で仮想サイトに複数のホスト名を割り当てる

Web サービスの開発をしていると、デフォルトである localhost:12345 というホスト名ではなくて www.mydomain.com みたいに、ちゃんとしたホスト名でテストする必要が出てくると思います。特に Area をサブドメインに振っている場合などはテスト自体できないことになってしまうます。

フルの IIS では簡単に設定が出来るんですが、IIS Express の場合はちょっと手間がかかるのでメモしておきます。

まずは IIS Express の設定を弄るのですが、GUI は用意されていないのでドキュメント以下にある IISExpress\config\applicationHost.config を開いて、プロジェクト名で検索します。すると、以下のような site 要素が見つかるはずです。

<site name="MvcApplication27" id="1458856189">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="..." />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:8207:localhost" />
    </bindings>
</site>

binding 要素を修正したり、追加したりするとホスト名を簡単に増やすことが出来ます。今回は以下のように 3 つ binding を追加しています。

<site name="MvcApplication27" id="1458856189">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="..." />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:8207:www.mydomain.com" />
        <binding protocol="http" bindingInformation="*:8207:admin.mydomain.com" />
        <binding protocol="http" bindingInformation="*:8207:subdomain.mydomain.com" />
    </bindings>
</site>

applicationHost.config の修正が終わったら Visual Studio で起動する URL を変更しておきます。

f:id:shiba-yan:20130306210549p:plain

これで実行したときに www.mydomain.com がブラウザで表示されるようになります。

あとは hosts ファイルに 3 つ分のレコードを追加すれば準備完了です。

127.0.0.1	www.mydomain.com
127.0.0.1	admin.mydomain.com
127.0.0.1	subdomain.mydomain.com

さて、これで全ての準備が完了したので Visual Studio で実行してみましょう。

f:id:shiba-yan:20130306210843p:plain

\(^o^)/オワタ

というのは冗談で、IIS Express で localhost 以外のホスト名を指定する場合には、Visual Studio を管理者権限で起動する必要があるようです。

実際に管理者権限でプロジェクトを実行したら、ちゃんと別々のホスト名が有効になります。

f:id:shiba-yan:20130306211030p:plain

最初は管理者権限で起動することに気が付かなくて、諦めそうになりましたが何とかなりました。

サブドメインと ASP.NET MVC の Area は組み合わせると面白いので、以下の記事を参考にして貰えればと思います。

Azure と MVC でドメインベースのルーティングを行ってみた - しばやん雑記

追記

真雪さんからコメントで netsh http add urlacl を叩けば管理者権限が要らないと教えてもらったので試しました。

netsh http add urlacl url=http://www.mydomain.com:8207/ user=Everyone

こんな感じで管理者権限のコマンドプロンプトでコマンドを叩くと、Visual Studio を管理者権限で起動しなくても、独自のホスト名を使えました。