ASP.NET

公開日: 2007 年 10 月 30 日 (作業者: walterov (英語))

更新日: 2008 年 9 月 3 日 (作業者: walterov (英語))

はじめに

IIS 7 では動的コンテンツ、特に ASP.NET の機能が拡張されています。IIS 7 の ASP.NET ランタイム拡張性モデルは、コア サーバーに統合されています。そのため、開発者は機能の限られた C++ API ではなく、ASP.NET 2.0 以降および .NET Framework の豊富な機能を使用して IIS を十分に拡張することができます。この緊密な統合は、既存の ASP.NET アプリケーションにもメリットをもたらします。既存の ASP.NET アプリケーションは、フォーム認証、役割、出力キャッシュなどの既存の機能を .aspx ページだけでなく、あらゆるタイプのコンテンツで使用できます。

ASP.NET と IIS 7 の統合の主な特長と利点については、「コア Web サーバーの概要」を参照してください。.NET Framework 3.5 の詳細とインストールについては、https://www.microsoft.com/net/ にアクセスするか、ASP.NET のコミュニティ サイト https://www.asp.net (英語) にアクセスしてください。

この記事で取り上げる設定は、ホスティング ガイドの記事「共有ホスティング アーキテクチャの計画」で説明されている共有ホスティング アーキテクチャの一部として、Web サーバーで使用されたものです。これらの設定が推奨されている理由、および構成方法の詳細については、https://www.microsoft.com/downloads/details.aspx?FamilyId=9E33EA25-666C-47FA-AC52-8D04785C4BD2&displaylang=en (英語) から『ASP.NET 展開ガイド (英語)』をダウンロードしてください。

信頼レベルを構成する

信頼レベルを構成することにより、ASP.NET のセキュリティ規則を定義できます。セキュリティ規則は、アプリケーションが実行できる操作の種類 (ディスクからの読み取り、レジストリへのアクセスなど) を定義します。推奨される信頼レベルは "中" です。このレベルでは、一般的な操作の大半が許可されますが、危険性のあるアプリケーションの多くは制限されます。中の信頼レベルでは必要な操作を実行できないという場合は、カスタム信頼レベルを作成する必要があります。

カスタム信頼レベルと追加のアクセス許可を構成するには

  1. %windir%\Microsoft.NET\Framework\{バージョン}\ CONFIG ディレクトリに移動します。

  2. 中の信頼レベルのポリシー ファイル web_mediumtrust.config をコピーし、同じディレクトリ内 (%windir%\Microsoft.NET\Framework\{バージョン}\CONFIG\) に新しいポリシー ファイルを作成します。

  3. ファイルの名前を、カスタム信頼レベルであることがわかるような名前 (web_CustomTrust.config など) に変更します。

  4. 新しいファイル (この手順の場合は web_CustomTrust.config) を開き、WebPermission セクションを検索します。

    ...
         <IPermission class="WebPermission"
    
                      version="1"
    
                   <ConnectAccess>
    
                       <URI uri="$OriginHost$" />
    
                   </ConnectAccess>
    
         </IPermission>
    
    ...
    
  5. WebPermission を編集して、ConnectAccess 要素を削除し、Unrestrictedtrue にします。

    ...
         <IPermission class="WebPermission"
    
                      version="1"
    
                      Unrestricted="true"/>
    
         ...
    
  6. 共有ホスティング環境で必要とされていなければ、PrintingPermissionEnvironmentPermission をコメントアウトします。

  7. 以下のように、Web.config ファイルの <securityPolicy> セクションに新たに <trustLevel> 要素を追加します。

    <location allowOverride="true">
    
        <system.web>
    
          <securityPolicy>
    
           <trustLevel name="Full" policyFile="internal" />
    
           <trustLevel name="High" policyFile="web_hightrust.config" />
    
           <trustLevel name="Medium" policyFile="web_mediumtrust.config" />
    
           <trustLevel name="Low" policyFile="web_lowtrust.config" />
    
           <trustLevel name="Minimal"
    
                       policyFile="web_minimaltrust.config" />
    
           <trustLevel name="Custom" policyFile="web_CustomTrust.config" />
    
          </securityPolicy>
    
          <trust level="Custom" originUrl="" />
    
         </system.web>
    
    </location>
    
  8. location allowOverride 要素を false に設定して、信頼レベルをロックします。これは、サーバー上のアプリケーションによって信頼レベルが変更されることを防ぐためです。

    <location allowOverride="false">
    
        <system.web>
    
          <securityPolicy>
    
           <trustLevel name="Full" policyFile="internal" />
    
           <trustLevel name="High" policyFile="web_hightrust.config" />
    
           <trustLevel name="Medium" policyFile="web_mediumtrust.config" />
    
           <trustLevel name="Low" policyFile="web_lowtrust.config" />
    
           <trustLevel name="Minimal"
    
                       policyFile="web_minimaltrust.config" />
    
           <trustLevel name="Custom" policyFile="web_CustomTrust.config" />
    
          </securityPolicy>
    
          <trust level="Custom" originUrl="" />
    
         </system.web>
    
    </location> 
    

コンテンツがリモート ファイル サーバーから提供されるように構成する

リモート ファイル サーバーに保存されているコンテンツを ASP.NET で使用できるようにするには、いくつかの追加の手順を実行する必要があります。

IIS がリモート ファイル サーバーからコンテンツを取得するときには、認証されているユーザーとして偽装してサーバーにアクセスします。認証されているユーザーとは、仮想ディレクトリ ユーザーとして指定されているユーザーまたは匿名ユーザー (特に指定されていない場合) です。この IIS 7 ガイドでは、アプリケーション プール ユーザーを匿名ユーザーとして使用しています。したがって、この場合、偽装される ID は、アプリケーション プールの ID となります。このように、すべてのアクセス (匿名、アプリケーション プール、および仮想ディレクトリ) を 1 つの ID で実行すると、展開を大幅に簡素化できます。

リモート ファイル サーバーから ASP.NET アプリケーションを実行する場合、偽装ユーザーは Windows Temp ディレクトリと一時コンパイル ディレクトリにアクセスしなければなりません。

ファイル サーバー共有から ASP.NET コンテンツを提供するには

  1. %windir%\Temp フォルダーの ACL を編集して、すべてのアプリケーション プール ID にこの %windir%\Temp ディレクトリへのアクセス許可を付与します。

  2. コード アクセス セキュリティ (CAS) ポリシーを追加して、ASP.NET がファイル サーバー共有に適切にアクセスできるようにします。CAS ポリシーを追加するには、コマンド プロンプトを開き、以下のコマンドを実行します。

    %windir%\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag 1.  -url "file://\\remotefileserver\content$\*" FullTrust

ガベージ コレクターの設定を構成する

.NET Framework では、自動ガベージ コレクターによって、すべてのアプリケーションのメモリーが管理されます。ガベージ コレクター (GC) は、ガベージがある程度の量に達すると、ガベージ コレクションの実行によって効率性が向上するかどうかを検証します。その結果、効果があると判断できる場合は、ガベージ コレクションを実行して、メモリーを解放します。このプロセスはすべて自動で行われますが、特定の設定を構成することによって、さらに効率性を高めることができます。

GC の詳細については、「第 5 章 マネージ コード パフォーマンスの向上」の「ガベージ コレクションについての説明」セクション (https://msdn2.microsoft.com/ja-jp/library/ms998547.aspx#scalenetchapt05_topic9) を参照してください。

ワークステーション ガベージ コレクターを有効にする

既定では、.NET Framework はサーバー GC を使用して速度と CPU 負荷を最適化しています。アクティブなサイトをいくつもホストする共有ホスティングでは、メモリーが圧迫されるのを防ぐため、ワークステーション GC を使用してください。ワークステーション GC はメモリーの最適化を実施します。

この設定の詳細については、サポート技術情報の記事「ASP.NET を使用する Web アプリケーションを Windows Server 2003 を実行するコンピューター上でホストすると、エラー メッセージが表示されるか、コンピューターが応答しなくなる (機械翻訳)」(https://support.microsoft.com/kb/911716) を参照してください。

コンカレント ガベージ コレクターを無効にする

GC には、サーバー、コンカレントが有効なワークステーション、およびコンカレントが無効なワークステーションの 3 つのバージョンがあります。コンカレント ワークステーション GC は、クライアント シナリオ用のバージョンです。サーバー GC がメモリーに多少の負荷をかけてもスループットや拡張性を優先するのと同様、コンカレント ワークステーション GC もメモリーの最適化より応答性を優先します。したがって、この設定を有効にすると、メモリーを最適化できます。

gcTrimCommitOnLowMemory 設定を有効にする

GC は将来の割り当てを見越してメモリーを保持するため、実際に必要な量以上の領域がコミットされる場合があります。このような領域を減らせば、システム メモリーに大きな負荷がかかるときにも対応が可能になります。gcTrimCommitOnLowMemory 設定を有効にすると、GC はシステム メモリーの負荷を評価し、負荷が 90% に達するとトリミング モードに移行します。その後、負荷が 85% 以下に低下するまで、トリミング モードが維持されます。ただし、状況によっては、GC はこの設定が現在のアプリケーションに対して効果がないと判断して、設定を無視する場合があります。

GC 設定を構成するには

  1. %windir%\Microsoft.NET\Framework\{バージョン} ディレクトリに移動します。

  2. aspnet.config ファイルを開き、<gcServer> 要素を検索します。この要素が存在しない場合は、手順 3 に従ってエントリを作成してください。

    ...
    
    <configuration>
    <runtime>
    <gcServer enabled="true"/>
    </runtime>
    </configuration>
    ...
    
  3. <runtime> セクション内に以下の 3 つの要素を追加します。

    ...
    <configuration>
    <runtime>
    <gcServer enabled="false" />
    
    <gcConcurrent enabled="false" />
    
    <gcTrimCommitOnLowMemory enabled="true" />
    </runtime>
    </configuration>
    ...
    
  4. ファイルを保存して閉じます。