ASP.NET ベースの Web アプリケーションを開発する際、Visual Studio に搭載されている開発サーバーを利用されている方は多いと思います。
余談ですが、この開発サーバーは、もともと Cassini という名前のサンプル Web サーバープログラムだそうで、今でも Microsoft のサイト ASP.NET Cassini Sample Web Server からソースコードを入手できます。(2012/1/8 追記: Cassini のダウンロードページがリンク切れになっていました。それに代わるものというわけではないですが、CassiniDev - Cassini 3.5/4.0 Developers Edition という CodePlex のサイトで改良版が提供されています)
開発サーバーは手軽で便利ですが、開発マシンで IIS が使えるのであれば、開発サーバーを開発に利用するのは避けたほうがいいと思います。
理由は、開発サーバーでは問題なく動いていても、IIS を使った本番環境に移すと動かないということがあるからです。
自分が認識している問題としては、以下があります。
-
アクセス権: 開発サーバーの場合は PC にログインしているユーザーアカウントが持つアクセス権を使います。Administrator 権限でログインしていれば、ほぼ無制限に PC 内のリソースにアクセスできます。一方、実環境で IIS 上で動かす場合、リソースへのアクセス権は IIS のワーカープロセスのアカウント(IIS7 の場合、デフォルトで NETWORK SERVICE)が持つものになります。そのアクセス権には制限がありますので、ファイルが開けないとか書き込めないという問題が出てきます。
-
統合パイプラインモード: 開発サーバーには IIS7 の統合パイプラインモードの機能がありません(クラッシックモード相当になります)。また、統合パイプラインモードとクラシックモードとでは web.config での HTTP ハンドラ、HTTP モジュールの定義方法が異なりますので、定義の仕方によっては、HTTP ハンドラ、HTTP モジュールが動かない場合があります。
-
要求のフィルタリング: IIS7 で導入された 要求のフィルタリング requestFiltering は開発サーバーにはありません。それゆえ、カスタムエラーの表示などエラーハンドリングが異なります。
-
MIME の種類: ファイルを要求した際、そのファイルの拡張子が IIS に定義済みの MIME の種類ではないと "HTTP エラー 404.0 - Not Found" を返します。よくある例が .flv や .mp4 ファイルで、開発サーバーでは再生できるが、IIS では再生できないという結果になります。(2013/4/20 追記)
-
SSL: 開発サーバーには SSL 通信の機能がありません。したがって、SSL 通信下における試験ができません。(2012/1/8 追記)
-
Session 0 分離: Windows Vista, Windows Server 2008 から Session 0 分離というセキュリティ対策がとられています(詳しくは、Windows でのサービスとドライバーへの Session 0 分離の影響 というページからダウンロードできる文書を参照)。つまり、ワーカープロセスは Session 0 で動いていて、それから起動されるアプリも Session 0 で動く。Session 0 は noninteractive なので、モーダルダイアログやフォームを表示することはできません(InvalidOperationException 例外がスローされます)。一方、ASP.NET 開発サーバーを使っている場合など、ワーカープロセスがログインしたユーザーのアカウントで動いている時は話が違ってきます。(2012/2/1 追記)
-
32-bit/64-bit の問題: これは逆に ASP,NET 開発サーバーで動かないケースで、利用しているライブラリが 64-bit 用の場合が問題になります。Visual Studio は 32-bit 版しか提供されていませんので、64-bit OS 上では WOW 上で 32-bit 動作します。その状態で、Visual Studio で Web アプリケーションを開発して ASP.NET 開発サーバで動作させた場合、Web アプリケーションは 32-bit で動作します。従って、x64 版の dll は動きません。例えば、Sharepoint の dll など x64 版 しかないものがあるそうですが、そのような場合は ASP.NET 開発サーバーでは動きません。(2013/9/5 追記)
-
その他: IIS 用に用意された 拡張モジュール が利用できない。特に使えないと困るのが、SEO 対策に有効な URL Rewrite Module でしょうか。(2012/1/8 追記)
IIS 上で開発すれば、上記のようなトラブルは未然に防ぐことができます。(Visual Studio 2010 SP1 でリリースされた IIS Express を使うという選択肢があるようですが、自分は使ったことがないので、上記の問題の有無はわかりません。)(2012/10/27 追記:今さらながらですが IIS Express を使ってみました。1 項の「アクセス権」の問題は IIS Express では解決できません。その他にも問題があります。詳しくは IIS Express をインストールしました を見てください。)
XP, Vista, 7 など、サーバー OS でなくても、あるグレード以上なら IIS が標準で実装されています。ちょっと設定に時間はかかりますが、IIS をインストールして IIS 上で開発できます。
ただし、OS のグレードによっては IIS がインストールされていても機能に制限があり、デバッグができないものがあるので注意してください。
------ 2013/9/6 追記 ------
ASP.NET 開発サーバー、IIS Express、IIS の比較を書いた Microsoft の公式文書(MSDN ライブラリ)を紹介しておきます(URL 下記)。Visual Studio で IIS を使用して開発したい方は、そのページの下の方の「IIS をインストールして Visual Studio と連動するように構成」というセクションに設定方法のページへのリンクがありますので参考にしてください。
ASP.NET Web プロジェクト用の Visual Studio の Web サーバー
ASP.NET 開発サーバーの実態は何かは、以下のページが参考になると思います。
VS 2005やIISを使用せずにWebアプリケーションを実行するには?[VS 2005のみ]
WebDev.WebServer.EXE がある場所は Visual Studio のバージョンによって異なるので注意してください。上のページに書いてある場所は Visual Stidio 2005 の場合です。
Visual Studio 2008, 2010 の場合は以下のようになります。64-bit OS の場合は Program Files ⇒ Program Files (x86) になるはずです。
VS2008:
C:\Program Files\Common Files\microsoft shared\DevServer\9.0
VS2010:
C:\Program Files\Common Files\microsoft shared\DevServer\10.0