自動開始機能

AppFabric の 自動開始 機能は、インターネット インフォメーション サービス (IIS) 7.5 の 自動開始 機能を発展させたものであり、Windows 7 と Windows Server 2008 R2 に組み込まれています。IIS では、アプリケーション プールを構成して、IIS サービスの開始時にそのアプリケーションの全部または一部が自動的に開始するように構成することができます。AppFabric の自動開始機能はこの機能を拡張したものであり、アプリケーションの開始時にアプリケーション内のサービスの全部または一部が自動的に開始するように構成することができます。

自動開始機能の利点

サービスに対して 自動開始 機能を有効にすると、クライアントから最初の WCF メッセージを受け取るまで待たずに、そのサービスが属するアプリケーションが起動されるとすぐにサービスが開始されます。このため、最初のメッセージが届いた時点でサービスは既に初期化されているので、メッセージを迅速に処理できます。たとえば、データベースに接続して数百行のデータを読み取り、最初に作成される .NET Framework キャッシュ データ構造に表示する必要があるサービスがあるとします。サービスが実際の動作を開始する準備ができるまでの初期化処理には時間がかかります。この場合に 自動開始 を使用すると、最初の呼び出しを受け取る前にサービスが初期化されます。

IIS の HTTP.SYS コンポーネントは HTTP 要求を処理し、Windows プロセス アクティブ化サービス (WAS) は IIS に付属するカスタムの WCF リスナー アダプターを使用して、TCP、名前付きパイプ、および MSMQ の要求を処理します。リスナー アダプターは、WAS と、HTTP 以外のプロトコルを使用するサービスとの間で接続を確立します。他のプロトコルを介して受信されるメッセージの処理をサポートするには、カスタム リスナー アダプターとその他の補助モジュールを開発する必要がありますが、これは複雑な作業です。リスナー アダプターの詳細については、「リスナー アダプター」 (https://go.microsoft.com/fwlink/?LinkId=160359) を参照してください。自動開始 のサポートにより、任意のプロトコルをサポートするアプリケーションを IIS に展開できます。これらの展開済みアプリケーションで 自動開始 を有効にしている場合、アプリケーションは WAS によってアクティブ化され、ワーカー プロセス内でアクティブのまま保持されます。

自動開始のシナリオ

自動開始機能を使用するサービスは、次のようなシナリオに対応します。

  • アプリケーションが展開されているコンピューターが再起動されます。そのコンピューターは、IIS、WAS、アプリケーション プール、およびサービスを自動的に開始するよう構成されています。このシナリオでは、アプリケーションを再起動するとサービスが自動的に開始されます。すべてのサービスを自動的に開始するようにアプリケーションを構成すると、そのアプリケーション内のすべてのサービスが自動的に開始されます。それ以外の場合は、Web.config ファイルに指定したサービスのみが開始されます。

  • WS-Discovery アナウンス プロトコルなど一部のプロトコルでは、アプリケーションが常に利用可能である必要があります。アプリケーションとそのサービスに対して自動開始を有効にすると、そのサービスを含むアプリケーションが起動されると常に、そのサービスは Windows Server AppFabric の自動開始機能によって自動的に開始されます。

  • 指定期間内に非常に多くのワーカー プロセスが正常でない状態になった場合、サービスが属するアプリケーション プールによって、迅速なエラー保護プロセスが開始されます。自動開始機能は、指定された期間内に一定数を超えるプロセスがエラーになった場合の迅速なエラー保護プロセスをサポートします。迅速なエラー保護のしきい値を超えた後、アプリケーションとそのサービスは再起動されません。

コンピューターの再起動シナリオ

自動開始機能がサポートされる場合のコンピューター再起動シナリオの例で、一般的な手順を次に示します。

  1. Windows プロセス アクティブ化サービス (WAS) が自動的に開始するよう構成されている場合は、WAS が開始します。WAS を構成するには、管理ツールのサービス アプレットを使用します。

  2. 自動開始が構成されているすべてのアプリケーション プールが、WAS によって開始されます。これらのアプリケーション プールの startMode 設定は、ApplicationHost.config ファイルで AlwaysRunning に設定されています。

    <applicationPools>
        <add name=”MyAppPool” startMode=”AlwaysRunning” />
    </applicationPools>
    
  3. 自動開始が構成されているすべてのアプリケーションが、WAS 内のアプリケーション マネージャーによって読み込まれます。serviceAutoStartEnabled 属性は、ApplicationHost.config ファイルで true に設定されています。

    <sites>
        <site name="MySite" id="1">
            <application path="/"  serviceAutoStartEnabled=”true” serviceAutoStartProvider=”Service” serviceAutoStartMode=”All/Custom”>
                <virtualDirectory path="/" physicalPath="C:\MySite" />
            </application>
        </site>
    </sites>                
    
  4. 自動起動モジュールが、アプリケーション初期化プロセスによって呼び出され、これにより、自動開始が構成されているサービスが開始されます。

    serviceAutoStartProvider 属性は IIS の拡張ポイントであり、これを使用してカスタム オブジェクトを開始できます。Windows Server AppFabric インストール プログラムによって Service プロバイダーがインストールされ、IIS スキーマが拡張されて serviceAutoStartMode 属性が追加されます。

    アプリケーションの serviceAutoStartModeAll に設定されている場合、アプリケーション内のすべてのサービスが開始されます。アプリケーションの serviceAutoStartModeCustom に設定されている場合、Web.config ファイルに指定されたサービスのみが開始されます。

    自動開始モジュールでは、relativeVirtualPath 設定の値を使用してサービスを読み込みます。次のコードは Web.config ファイルからの抜粋で、relativeVirtualPath に 2 つのサービスが構成されている部分です。サービスの relativeVirtualPath は、そのサービスを含むアプリケーションからサービスへの相対的なパスです。

    // a sample Web.config fragment with two services configured to use the auto-start feature.
    <Microsoft.ProcessServer.Hosting>
        <serviceAutoStart>
            <add relativeVirtualPath =”/Calendar/Appointments.xamlx” >
            <add relativeVirtualPath =”/BookStore/ShoppingCart.svc” >
        </serviceAutoStart>
    </Microsoft.ProcessServer.Hosting>
    

    ヒント

    サービスの自動開始設定は Web.config ファイルに格納され、アプリケーション プールとアプリケーションの自動開始設定は ApplicationHost.config ファイルに格納されます。

自動開始の構成

WCF サービスまたは WF サービスの 自動開始 機能を構成するには、IIS マネージャー拡張機能か AppFabric のコマンドレットを使用します。自動開始 機能を構成する詳細な手順については、「自動開始の構成」セクションの「IIS マネージャーを使用した自動開始の構成」と「Windows Server AppFabric コマンドレットを使用しての自動開始の構成」を参照してください。

ヒント

自動開始 機能がサービスで有効になっている場合、IIS ではアプリケーション プールおよびこのアプリケーション プールを使用するアプリケーションの Idle Timeout 設定が無視されます。アプリケーション プールに関連付けられているワーカー プロセスは、アプリケーション プールのアイドル状態が Idle Timeout 値を超えた後も、メモリ内に残ります。

警告

サービスの初期化コードが非効率的で、初期化に時間がかかる場合、IIS の起動時間を超過して、現在の状態でプロセスがシャットダウンされる可能性があります。複数の CPU が搭載されたコンピューターでサービスを実行している場合は、サービスの初期化コードから複数のスレッドを使用するように設計することをお勧めします。

関連項目

概念

自動開始の構成

  2011-12-05