日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

ASP.NET アプリを IIS に配置する(ただし一度パッケージングしてからのやり方)

はじめに

2017/01/23 加筆修正

自分でおさらい的に見返してて足りない部分があったのを追加した。

  • Web 公開ウィザードで Web Deploy Package 作成時複数ファイル出来上がる事などを追加
  • インポートをどこでやるのかを書くのを忘れていたので追加

やりたい事の要点

  • 前回作った ASP.NET Web API を使う最低限の構成の ASP.NET アプリをローカルで一度パッケージングしてから(ここ大事) そのパッケージを使って IIS に配置・ホスティングしたい

経緯的なもの

さて、前回の記事ASP.NET Web API の最低限の構成となるものが何なのかは理解できてローカルではあるが動作確認も取れた。

次はこれをリモートの IIS が動く Windows サーバに配置してホスティングするにはどうすれば良いのか次に調べだした。

ただ、アプリの配置には条件があり、一旦インストーラとか zip とかパッケージ的なものをローカルで一度固めて それをリモートの IIS が動くサーバに転送して配置する必要がある。

Visual Studio から直接リモートの IIS に接続してアプリを配置する方法はググるとすぐに見つかる。 Visual Studio Web プロジェクトの公開ウィザードっぽいもの*1を使った方法である。 ただこの最初に見つかる方法は Visual Studio から直接サーバに繋いで配置するやり方でこの方法は今回の自分の状況では使えない。

自分が望む条件ももう少し調べると同じウィザード画面で Web Deploy Package を選択すればできそうなのだが、 実際の IIS への配置までの手順を通してやったものが何故か中々見つからず調べるのに少し骨が折れた。

まあ一応 MSDN でそれっぽいのが見つかったが

https://msdn.microsoft.com/ja-jp/library/dd483479(v=vs.100).aspx

クドいし自分が知りたい事以外の情報が多すぎる・・・。

多分今回の目的に一番合うのは英語だが以下の記事の方がよりシンプルだと思う。

https://msdn.microsoft.com/en-us/library/dd465323(v=vs.110).aspx

今回は本当にトライ&エラーの果てに自分のこの記事でまとめた方法にたどり着いた感じで、 (と言っても別にトリッキーな方法を使った訳でもなく単に必要な情報をピックアップするのに手間取っただけ) 作業メモ的な側面がいつもより強いかも。

手順概要

  1. Visual Studio 2015 の Web 公開ウィザード(?) で Web Deploy Package を作成する
  2. アプリ配置前 IIS 設定(必要なら)
  3. IIS マネージャーから作成した Web Deploy Package をインポートする

Visual Studio 2015 の Web 公開ウィザード(?) で Web Deploy Pakcage を作成する

  • Visual Studio 2015(以下 VS2015) で動作確認済の ASP.NET Web アプリプロジェクトを開く
  • ソリューションエクスプローラでプロジェクトの所を右クリック -> 公開(B)

  • Web 公開ウィザード(?) で以下のように進める

    • プロファイル
      • カスタム選択
        • プロファイル名は適当に決める。残りの設定が終われば以後このカスタムプロファイルを選択。
    • 接続

      • Publish Method は「Web Deploy Package」を選択
      • Package Location は適当に選ぶ。複数のファイルができるのでソリューションフォルダ直下に out とか作ってそこ指定した方がいいかも。
      • IIS でのサイト名を決める。これも面倒なんでプロジェクト名と同じにした。
    • 設定

      • Configuration は Relese で。サーバ上でデバッグしたい場合は Debug の方が良い気がするが未確認。
      • File Publish Option で Precompile during publishing に何となくチェック
        • これも別にチェック入れなくても支障はない気がする。挙動が速くなりそうな気がしたので。

ここまで設定して「発行」を押すと、指定した Package Location の中に結構色々なファイルが生成される。 ただ、この後のインポートで必要なのは生成された zip ファイルのみ。 一応念の為サーバへ全部を持っていこうと全体を zip してみたら 約4MBだった。結構サイズでかいんだな。

アプリ配置前 IIS 設定(必要なら)

配置サーバ環境

  • Windows Server 2008(英語版)
  • IIS 7.5
    • IIS .NET 4.0 モジュールはインストール済っぽい。後述の手順で選べたからというだけで、ちゃんとした確認方法は未確認。

手順などで単語が英語多めになるけどご勘弁。

Default Application Pool の .NET Version 変更

IIS Manager を開き、Default Web Site の Application Pools で DefaultAppPool の .NET Framework Version を v4.0.30319 に変更する。 または新たに Web Site を追加して DefaultAppPool を v4.0.30319 にする。

これをやらないと WebAPI に対応する URL にいくらアクセスしても HTTT 404 エラーが返ってくるので大事。

IIS マネージャーから作成した Web Deploy Package をインポートする

  1. Default Web Site 右クリック -> Deploy -> Import Application...
  2. 何やらインポートウィザードらしきものが出て、パッケージファイルを選択しろと出るので、Web 発行ウィザードで生成された zip を選択
  3. インポートするファイル選択など出るが、特に何もせず次へと押していく

動作確認は URL を前回の Localhost から今回配置したリモート IIS への URL に変えるだけなので割愛。

グチ

全く・・・この情報にたどり付くのにほぼ丸一日かかった。 これかもしれないと気づいたリンクは こちらで、 そのリンク先は探している途中で既に通っていた(読んでいるとは言ってない) MSDN のチュートリアル記事 の中に書いている事に後で気づきさらに疲れた。。。

網羅的に全部書くのはそれはそれでいいんだけどもう少し分かり易いサマリーと言うか項目まとめも付けてくれんかねえ。

*1:公式名称は良く分からない