こんにちは。
このところブログを書いていないので、何か書いておきます。(こんな内容で、すみません. . .)
以前も記載しましたが、Visual Studio 2012 で Web プロジェクトを構築すると、既定で、デバッグ時に IIS Express が使用されます。
ご存じの通り、IIS Express を使うと、ASP.NET ハンドラーだけでなく、IISのハンドラー (または IIS モジュール) を作ったデバッグや、SSL のテストが迅速に可能など、いろいろと恩恵は多いのですが、気を付けておくこともいくつかあるので、以下に記載してみます。
(最近、Windows Developer Days の準備でバリバリ使ってますが、いろいろと思うところが多く . . .でも、愚痴ではありません . . .)
設定内容の一部は、別のファイルに書かれます . . .
まずは、基本の “き” ですが、以前、こちら でも記載した通り、IIS Express の設定は、以下に記載されています。
%userprofile%\Documents\IISExpress\config\applicationhost.config
このため、SSL 有効化の設定など、プロジェクトにおこなった設定の一部は、ここに記載されます。(実施したはずの設定が、プロジェクトのフォルダー内のどのファイルを探しても見つからない場合、この設定ファイルを確認してみてください。)
配置の際のトラブルの原因ともなるので注意しておきましょう。
Visual Studio プロジェクトが、迅速にコピーできない !
これが一番嫌なところです。
まず、Visual Studio で Web アプリケーションのプロジェクト (ASP.NET、ASP.NET MVC、WCF 等々) を作る度に、上記の設定ファイル (applicationhost.config) にサイトが 1 つ追加されます。
このため、プロジェクトのコピーを作成して Visual Studio で開こうとすると、
「Web プロジェクト ‘…’ は現在 URL http://…/ を使用するように構成されています。Web サーバーでは、この URL が別のフォルダー ‘…’ にマップされています。この URL がこの Web プロジェクトのフォルダーを指すように再マップしますか?」
という下図の警告 (エラー) が表示されます。(実行していない限り、普段ポート自体はあがっていませんが、設定ファイル内でポートが競合するためです。)
また、上図で、[はい] と押してしまうと、コピー元のプロジェクトで使っていたサイトの設定が コピー先のものに変更されるため、今度は、コピー元が使えなくなってしまいます。(これ、Visual Studio 2012 Beta だけの動きかもしれませんが. . . )
もちろん、Visual Studio 開発サーバーを使っていたとき (以前) には、Web プロジェクトのコピー / ペーストでポータブル (可搬的) にプロジェクトを扱うことができました。(もちろん、Visual Studio 2012 でも、プロジェクトの設定変更によって、昔のように Visual Studio 開発サーバーを使うことはできますが、できれば IIS Express を使いたいところです . . .)
この正しい対処方法としては、applicationhost.config を開いて、競合しないよう、サイトで使用しているポートをマップしなおすことですが、迅速に「お試し」したいと思っているときに、いちいちこんなことはしたくはありません。
そこで、あまり Microsoft の社員としてはお勧めしませんが (以下、自己責任でやってください)、コピー直後に、.csproj ファイルをメモ帳などで開き、下記の通り使用するポート番号を変更してから Visual Studio で開きます。この1 手間を入れるだけで、新しいポート番号で IIS Express のサイトを構築し、コピー元も、コピー先も、ちゃんと開くことが可能です。(う~ん、あとから書き直しても、あんま変わんないかな. . . )
<?xml version="1.0" encoding="utf-8"?><Project . . .> . . . <ProjectExtensions><VisualStudio> <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"><WebProjectProperties> <UseIIS>True</UseIIS> <AutoAssignPort>True</AutoAssignPort> <DevelopmentServerPort>0</DevelopmentServerPort> <DevelopmentServerVPath>/</DevelopmentServerVPath> <IISUrl>http://localhost:49158/</IISUrl> <NTLMAuthentication>False</NTLMAuthentication> <UseCustomServer>False</UseCustomServer> <CustomServerUrl> </CustomServerUrl> <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile></WebProjectProperties> </FlavorProperties></VisualStudio> </ProjectExtensions></Project>
なお、他人からプロジェクトをもらって開く場合にも、同様の点が課題となります。(ポート番号の競合に注意してください。)
そして、ゴミが残る . . .
上記で記載した通り、お試しの Web アプリケーションを作る度に、IIS Express のサイトが 1 つ増えます。つまり、開発を進める過程で、どんどんゴミの設定が増えていきます。(これは、実行しなくても、プロジェクトを作るたびに作成されます。)
私のように、頻繁にコピーして試しては消している方は、たまには設定を掃除しておきましょう。
IIS と同じではない ! (ユーザー コンテキスト、権限などに要注意)
IIS Express と言えども、ユーザー コンテキストは、Visual Studio 開発サーバーのとき (以前) と同じです。例えば、Windows Server 上の開発などで、Administrator で Visual Studio を開き、IIS Exptress を使ってデバッグすると、サーバー側のリソース接続では Administrator として接続されますので注意してください。(IIS にホストして見たら、動きが変わるという結果になります。)
「どのユーザーで動いているか」という点は、SQL Server などデータベースへのアクセスではよくハマる問題です。(どのみち、IIS の Application Pool の設定に依存するので、IIS にホストしているからと言って完璧ではないのですが . . .) IIS にホストする際は、connectionStrings や、Entity Framework における defaultConnectionFactory などを適宜変更してください。
あと、「IIS にあって、IIS Express にはない」という機能もありますので、注意してください。(“近い” ですが、必ずしも “一緒” と過信してはいけません。)
ネガティブなことを書きましたが、繰り返しになりますが、IIS Express は基本的に「できる奴」ですので、癖を理解して、うまく付き合っていきましょう ! (Visual Studio 2010 のときに、もっと使っておけば良かったです . . .)
Categories: Uncategorized
1 reply»