はじめに
これまで IIS を利用して .NET の Web サーバーを立てたことがなかったので、ハンズオン形式でサイトを立ててみました。
仕事では既に構築された IIS 上の Web サーバーを扱ったことはありましたが、最初から立てるのは今回が初めてです。
この記事では、.NET の Minimal API を作成し、IIS 上でホストするまでの手順を紹介します。
手順
Step 1: プロジェクトの作成
Visual Studio の GUI から ASP.NET Core Webアプリケーション を選択してプロジェクトを作成しました。
作成後、Minimal API として動作させるため、Program.cs
を以下のように編集しました。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello, World!");
app.MapGet("/api/greet/{name}", (string name) => $"Hello, {name}!");
app.Run();
Step 2: IIS の準備
- Windows の機能の有効化から インターネット インフォメーション サービス (IIS) と インターネット インフォメーション サービスのホスト可能な Web コア を有効化してください。
- IIS マネージャーを開きます。
Step 3: アプリケーションの発行
以下のコマンドでリリースビルドを行い、成果物を生成します。
dotnet publish -c Release
-c Release
はリリースモードでのビルドを意味します。
ビルドが成功すると、bin/Release/net8.0/publish
フォルダに成果物が生成されます。これが IIS でホスティングする対象になります。
Step 4: IIS への配置
- IIS マネージャーを開き、サイトの追加 を選択します。
- 物理パスに
publish
フォルダの絶対パスを指定します。 - ポート番号を設定し、サイト名を入力します。
- 設定後、ブラウザで
http://localhost:ポート番号/
にアクセスします。 - 「4」で無事にアクセスできたら、同一ネットワーク上の他のデバイス(例: スマホ)からもアクセスできるか確認しました。ファイアウォールの設定にて、今回使用するポートの受信を許可することでアクセスできました。
発生したエラーとその対応
もし URLアクセス時にHTTP Error 500.19 - Internal Server Error
が発生した場合、以下の原因が考えられます。
原因1: ASP.NET Core Hosting Bundle がインストールされていない
- 対応方法:ASP.NET Core ランタイムを公式サイトからダウンロードし、インストールしてください。
原因2: web.config の構文エラー
- 対応方法:
processPath
をdotnet
からpublish
フォルダ内の.exe
に変更してください。
原因3: リリース成果物フォルダのアクセス権限が不足
- 対応方法:
publish
フォルダの「読み取り」と「実行」権限をIIS_IUSRS
に付与してください。
おわりに
今回のハンズオンでは、IIS 上で .NET の Minimal API をホスティングする方法を学びました。
IIS 上で新規サービスの立ち上げ手順を一通り学んだことで、今後の業務に役立てられると感じています。