MS_IISExpress - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

IIS Express

概要

  • WebMatrix から Visual Studio標準同梱へ。
  • 昨今、高度な開発用 Web サーバが無いと厳しいこともあり。

補足(位置づけ): IIS Express は
IISと同じコードベースの、開発者向け軽量版である。

IIS IIS Express Kestrel
実行 Windows サービス ユーザー プロセス ユーザー プロセス
管理者権限 必要 不要 不要
対象 本番 開発 開発・本番(ASP.NET Core
OS Windows Windows クロスプラットフォーム

「本番と同じ挙動を開発機で再現できる」点が価値だった。
ただし ASP.NET Core以降は
Kestrel が既定になり、IIS Express の出番は減っている
launchSettings.json でプロファイルを選ぶ)。

詳細

各種設定

applicationhost.config に設定する。

  • 基本的には、Project ファイルから自動的に設定が行われる。
  • 必要に応じて、applicationhost.config を手書き修正する。
Visual Studio 格納場所
2015 以前 C:\Users\[ユーザ名]\Documents\IISExpress\config\
2015 以降 [ソリューションのディレクトリパス]\.vs\config\

補足(.vs フォルダは共有しない): 2015 以降の格納先である
.vs フォルダは、.gitignore に入れるのが標準である
(Visual Studio のテンプレートも既定で除外する)。

このため、

  • applicationhost.config を手書きした設定はリポジトリに残らない
  • 他の開発者や CI では再現しない

という点に注意が要る。
チームで共有したい設定は .csproj 側(<UseIISExpress> など)や
launchSettings.json に書くか、
手順を README に残す必要がある。

32bit、64bit

Project ファイルで以下の様な設定を行う。

<UseIISExpress>false</UseIISExpress>
<Use64BitIISExpress />

Visual Studioのメニューからは
[ツール]→[オプション]→[プロジェクトおよびソリューション]
→[Web プロジェクト]→
[Web サイトおよびプロジェクト用 IIS Express の 64 ビット バージョンを使用]を ON。

レジストリで設定する場合。

# 項目
1 キー HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\xx.0\WebProjects
2 値名 Use64BitIISExpress
3 データ 1

補足(32bit / 64bit を合わせる): 32bit の COM
ODBC ドライバに依存するアプリでは、
IIS Express のビット数を本番の IISに合わせる必要がある。
詳細は64bit対応を参照。

localhost以外

可能らしい。

Docker

  • Dockerから接続する場合
    host.docker.internal」が使用できる。
  • 以下の様に applicationhost.config に定義を追加する。
<!-- AS-IS -->
<binding protocol="https" bindingInformation="*:44300:localhost" />

<!-- TO-BE -->
<binding protocol="https" bindingInformation="*:44300:localhost" />
<binding protocol="https" bindingInformation="*:44300:host.docker.internal" />
  • host.docker.internal は、以下の様に名前解決される。
    • コンテナ側は、192.168.65.2
    • ホスト側は、192.168.0.6

外部公開

可能らしいが、潔く IISにデプロイした方が早そう。
(HTTPS 化で Let's Encrypt の証明書を発行する等の色々があるので)

  • bindingInformation に設定しても、hosts に設定してもイイらしい。
  • ホスト外からアクセスする場合に必要
    • Windows Defender ファイアウォールを無効化するか、通す。

    • Visual Studioを管理者実行で実行する。
      管理者実行しない場合は、以下コマンドで URL 予約。

      netsh http add urlacl url=http://fqdn:xxxxx/ user=Everyone
      

SSL設定 / クライアント証明書

いずれも可能らしい。
クライアント証明書については ASP.NET+クライアント証明書を参照。

ハマリ

SSLポート範囲

44300 - 44399 の範囲しか設定できないらしい。

補足(理由): この範囲は、Visual Studio のインストール時に
netsh http add sslcert で自己署名証明書があらかじめ予約されている
ためである。範囲外のポートで HTTPS を使いたい場合は、
自分で証明書をポートにバインドする必要がある。

netsh http add sslcert ipport=0.0.0.0:44500 certhash=<拇印> appid={GUID}

開発中に「なぜか 44300 番台しか動かない」と悩む定番の箇所である。

補足(現在の開発サーバー事情): ASP.NET Coreでは
状況が変わっている。

プロファイル 内容
http / https(Kestrel) 既定。クロスプラットフォーム。速い
IIS Express IIS 固有の機能(Windows 認証、モジュール)を試したいとき
IIS 本番同等の検証

launchSettings.json で切り替える。
本番が IISなら、一度は IIS Express か IIS で動かして確認する
のが安全である(ANCM 経由の挙動差があるため)。

参考

Microsoft Learn


Tags: 移行, Windows, IIS, .NET開発, ツール類

⚠️ **GitHub.com Fallback** ⚠️