サイトのアプリケーション <application>

  • 概要
  • 互換性
  • セットアップ
  • 方法
  • 構成
  • サンプル コード

※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。

概要

<application> 要素は、特定のアプリケーションの構成設定を制御します。インターネット インフォメーション サービス (IIS) 7.0 において、アプリケーションは HTTP などのプロトコルを介してコンテンツやサービスを提供するファイルの集まりです。 IIS 7.0 でアプリケーションを作成すると、そのアプリケーションのパスがサイトの URL の一部になります。

IIS 7.0 において、各サイトには少なくとも 1 つのアプリケーションが必要です。このアプリケーションは、ルート アプリケーション、または既定のアプリケーションと呼ばれます。ただし、1 つのサイトに複数のアプリケーションを格納することもできます。たとえば、オンライン コマースの Web サイトには、ユーザーが買物中にアイテムを収集できるようにするショッピング カート アプリケーションや、ユーザーが保存されている支払い情報を購入時に呼び出せるようにするログイン アプリケーションなどの複数のアプリケーションを格納できます。

個々のアプリケーションには、少なくとも 1 つの仮想ディレクトリが必要です。このディレクトリは、ルート仮想ディレクトリまたは既定の仮想ディレクトリと呼ばれ、<virtualDirectory> 要素で構成設定が定義されます。

互換性

  IIS 7.0 IIS 6.0
注意 <application> は IIS 7.0 で新たに導入された要素です。

<application> 要素は、IIS 6.0 のメタベース オブジェクト IIsWebVirtualDir および IIsWebDirectory に代わるものです。

セットアップ

<application> 要素は、IIS 7.0 の既定のインストールに含まれています。

方法

新しい Web アプリケーションを作成する方法

  1. [スタート] ボタン、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。

  2. [接続] ウィンドウで当該サーバー名を展開して [サイト] を展開し、アプリケーションを追加する Web サイトをクリックします。

  3. [操作] ウィンドウで [アプリケーションの表示] をクリックし、[アプリケーションの追加] をクリックします。

    拡大

  4. [アプリケーションの追加] ダイアログ ボックスで、少なくとも [エイリアス] テキスト ボックスと [物理パス] テキスト ボックスに情報を入力して [OK] をクリックします。

    拡大

    : 別のアプリケーション プールを選択するには、[選択] をクリックします。また、特定のアカウントの資格情報を受け入れるようにアプリケーションを構成するには、[接続] をクリックし、アプリケーションの認証および承認設定をテストするには、[テスト設定] をクリックします。

構成

<application> 要素は、ApplicationHost.config ファイル内で、サーバー レベルで構成できます。

属性

属性 説明
applicationPool オプションの string 属性。

アプリケーションの割り当て先のアプリケーション プールを指定します。
enabledProtocols オプションの string 属性。

アプリケーションとの通信に使用するプロトコルを指定します。この値によって、そのアプリケーションに対して HTTP プロトコルと HTTPS プロトコルが有効になります。

既定値は http です。
path 必須の string 属性。

アプリケーションの仮想パスを指定します。親サイト内の一意のパスを指定する必要があります。

子要素

要素 説明
virtualDirectory オプションの要素。

親アプリケーション内の仮想ディレクトリの構成設定を指定します。
virtualDirectoryDefaults オプションの要素。

親アプリケーション内のすべての仮想ディレクトリの既定の設定を指定します。

構成サンプル

次の構成例では、2 つのアプリケーションが格納された <site> 要素が表示されます。最初の <application> 要素では、そのサイトのルート アプリケーションと、そのアプリケーションのルート仮想ディレクトリを定義しています。2 番目の <application> 要素には、その Web サイト上の CRM アプリケーションの構成設定を格納しています。path 属性によって、そのアプリケーションのパスを定義しています。この <application> 要素には、<virtualDirectory> 要素を 2 つ格納しています。最初の要素では、そのアプリケーションのルート仮想ディレクトリを定義し、2 番目の要素では、そのアプリケーションの Images 仮想ディレクトリを定義しています。

<site name="Contoso" id="2" serverAutoStart="true">
   <application path="/">
      <virtualDirectory path="/" physicalPath="C:\Contoso\Content" />
   </application>
   <application path="/CRM">
      <virtualDirectory path="/" physicalPath="C:\Contoso\Content\CRM" />

      <virtualDirectory path="/Images" physicalPath="E:\Images" />
   </application>
   <bindings>
      <binding protocol="http" bindingInformation="*:80:www.contoso.com" />
   </bindings>
</site>

サンプル コード

次の例では、Contoso という名前のサイトに、ShoppingCart という名前の新しいアプリケーションを作成し、このアプリケーションのルート仮想ディレクトリとして C:\Inetpub\Contoso\ShoppingCart を指定しています。

: コマンド プロンプトまたはスクリプトからアプリケーションを作成するときには、そのアプリケーションのルート仮想ディレクトリを明示的に作成する必要があります。

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart']" /commit:apphost

appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart'].[path='/',physicalPath='C:\Inetpub\Contoso\ShoppingCart']" /commit:apphost

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Contoso");

         if (siteElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElementCollection siteCollection = siteElement.GetCollection();
         ConfigurationElement applicationElement = siteCollection.CreateElement("application");

         applicationElement["path"] = @"/ShoppingCart";
         ConfigurationElementCollection applicationCollection = applicationElement.GetCollection();
         ConfigurationElement virtualDirectoryElement = applicationCollection.CreateElement("virtualDirectory");
         virtualDirectoryElement["path"] = @"/";
         virtualDirectoryElement["physicalPath"] = @"C:\Inetpub\Contoso\ShoppingCart";
         applicationCollection.Add(virtualDirectoryElement);
         siteCollection.Add(applicationElement);

         serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
      Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Contoso")

      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim siteCollection As ConfigurationElementCollection = siteElement.GetCollection
      Dim applicationElement As ConfigurationElement = siteCollection.CreateElement("application")
      applicationElement("path") = "/ShoppingCart"
      Dim applicationCollection As ConfigurationElementCollection = applicationElement.GetCollection
      Dim virtualDirectoryElement As ConfigurationElement = applicationCollection.CreateElement("virtualDirectory")
      virtualDirectoryElement("path") = "/"
      virtualDirectoryElement("physicalPath") = "C:\Inetpub\Contoso\ShoppingCart"
      applicationCollection.Add(virtualDirectoryElement)
      siteCollection.Add(applicationElement)

      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Contoso"]);

if (siteElementPos == -1) throw "Element not found!";

var siteElement = sitesCollection.Item(siteElementPos);
var siteCollection = siteElement.Collection;
var applicationElement = siteCollection.CreateNewElement("application");
applicationElement.Properties.Item("path").Value = "/ShoppingCart";
var applicationCollection = applicationElement.Collection;
var virtualDirectoryElement = applicationCollection.CreateNewElement("virtualDirectory");
virtualDirectoryElement.Properties.Item("path").Value = "/";
virtualDirectoryElement.Properties.Item("physicalPath").Value = "C:\\Inetpub\\Contoso\\ShoppingCart";
applicationCollection.AddElement(virtualDirectoryElement);
siteCollection.AddElement(applicationElement);

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Contoso"))

If (siteElementPos = -1) Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If

Set siteElement = sitesCollection.Item(siteElementPos)
Set siteCollection = siteElement.Collection
Set applicationElement = siteCollection.CreateNewElement("application")
applicationElement.Properties.Item("path").Value = "/ShoppingCart"
Set applicationCollection = applicationElement.Collection
Set virtualDirectoryElement = applicationCollection.CreateNewElement("virtualDirectory")
virtualDirectoryElement.Properties.Item("path").Value = "/"
virtualDirectoryElement.Properties.Item("physicalPath").Value = "C:\Inetpub\Contoso\ShoppingCart"
applicationCollection.AddElement(virtualDirectoryElement)
siteCollection.AddElement(applicationElement)

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set Property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not value = Null Then
               value = CStr(value)
            End If
            If Not value = valuesToMatch(iVal + 1) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function