IIS Express で、あれこれ


こんにちは。

このところブログを書いていないので、何か書いておきます。(こんな内容で、すみません. . .)

以前も記載しましたが、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 のときに、もっと使っておけば良かったです . . .)

 

Comments (0)

Skip to main content