web-dev-qa-db-ja.com

IIS 8.5-アプリケーションの初期化が機能しない

アプリケーション初期化をインストールし、Webサイトのアプリケーションプールの開始モードを「常に実行中」に設定し、Webサイトの詳細設定でプリロード有効=「True」を設定しました。

ただし、アプリケーションプールを手動でリサイクルして10秒待つと、Webサイトをリロードするときに、Webサイトがウォームアップするまでさらに10秒待つ必要があります。これは、Webサイトが開始されていないことを示しています。

タスクマネージャーを見ると、リサイクル後でも、アプリケーションプールが常に実行されていることがわかります。ただし、自分でWebサイトにリクエストするまでは、メモリ使用量は非常に少なくなっています。

私が気づいたことの1つは、次のリンクにあるように、Webサイトの詳細設定に「自動開始」設定がないことです。 https://blogs.msdn.Microsoft.com/vijaysk/2012/10/11/iis-8-whats-new-website-settings /

アプリケーションを自動起動するにはどうすればよいですか?

8
Laurence Frost

それはすべてが正しくなければならない設定の全体の負荷であることが判明しました。すべての手順を実行して、関連するコンポーネントをインストールし、次のリンクに従ってさまざまな構成を変更します。 http://www.iis.net/learn/get-started/whats-new-in-iis -8/iis-80-application-initialization

私にとって欠けていた重要な部分は、以下のようなWeb.configの命令でした。有効なルートである「/ Login」だけに行くようにしましたが、「/ [Controller]/[Action]」に切り替えるとすぐに機能しました。

このルートの利点は、データベースにアクセスするカスタムアクションを作成し(Entity Frameworkを初期化)、その他の低速な初期化を実行できることです。私の場合、DBテーブルからレコードを読み取るだけなので、ASP.NETが自動起動し、EFのウォームアップにかかる数秒も節約できます:)

<system.webServer>
  <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
      <add initializationPage="/Login/WarmUp" />
    </applicationInitialization>
</system.webServer>
18
Laurence Frost

これらの記事はとても良いです:

ASP.NETアプリを存続させるためにIISアプリケーションの初期化を使用

IIS 8.0アプリケーションの初期化

ただし、私の場合、アプリケーション初期化ロールのインストールに問題がありました。

IISアプリのモジュールリストを確認します。ApplicationInitializationModuleが存在することを確認します。

enter image description here

このモジュールをアンインストール/再インストールする必要がありました。

これは最初は機能しているように見えたので、何が起こったのかわかりませんが、数週間後の開発中に停止しました。いじくり回したり手直ししたりしても修正されなかったので、実際にこれが機能しているのを見たことがないのではないかと思い始めました。

アプリケーション初期化モジュールの役割をアンインストール/再インストールすると、問題が解決しました。

5
jlo-gmail

これらの設定を設定できる.configの場所は複数あります。

  1. マシンapplicationHost.config(c:\ windows\system32\inetsrv\Config)
  2. Webサイトweb.config(デフォルトのWebサイトの場合はc:\ inetpub\wwwroot)
  3. アプリケーションweb.config

私はすべてを試しましたが、3、アプリケーションweb.configの構成にのみ成功しました。私の特定のユースケースは、WCFサービスでGETメソッドを呼び出すことでした。

アプリケーションの初期化の手順は、他の回答にも記載されています。これが最も役に立ちました。 IIS 8.0アプリケーションの初期化

  1. Windows機能のインストールアプリケーションの初期化(Web-AppInit
  2. IISアプリプールStart mode = AlwaysRunningを設定します
  3. IISアプリケーションPreload Enabled = trueを設定します
  4. アプリケーションweb.configに追加します

    <system.webServer>     
        <applicationInitialization doAppInitAfterRestart="true" skipManagedModules="true">
            <add initializationPage="/Service.svc/Method/Parameter" />
        </applicationInitialization>
    </system.webServer> 
    
  5. アプリプールをリサイクルする

  6. アプリが初期化されていることを確認してください。

私が指摘したいのは、初期化ページはWebサイト/ドメインのルートではなく、アプリケーションに関連しているため、絶対パスが

domain.com/path1/path2/Service.svc

initializationPageパラメーターに/path1/path2を含めません。

2
Gerard Sexton

初期化する領域が複数ある場合にMVCで何をすべきか疑問に思っている場合は、その領域をすべてルートweb.configファイル内の先頭に配置する必要があります。エリアのweb.configに入れようとしてしばらく立ち往生しました。また、ハイブリッドアプリケーションと完全に互換性があります。

<add initializationPage="/NotMVC.aspx" />
<add initializationPage="/Area1/Controller/Action" />
<add initializationPage="/Area2/Controller/Action" />
2
George