Condividi tramite


Applicazione per un'applicazione del sito <>

Panoramica

L'elemento <application> controlla le impostazioni di configurazione per un'applicazione specifica. Un'applicazione in Internet Information Services (IIS) 7 o versione successiva è un raggruppamento di file che distribuisce contenuto o fornisce servizi tramite protocolli, ad esempio HTTP. Quando si crea un'applicazione in IIS 7 e versioni successive, il percorso dell'applicazione diventa parte dell'URL del sito.

In IIS 7 e versioni successive ogni sito deve avere almeno un'applicazione, denominata applicazione radice o predefinita. Tuttavia, un sito può avere più di un'applicazione. Ad esempio, il sito Web di commercio online può contenere diverse applicazioni, ad esempio un'applicazione carrello acquisti che consente agli utenti di raccogliere articoli durante lo shopping e un'applicazione di accesso che consente agli utenti di richiamare le informazioni di pagamento salvate quando effettuano un acquisto.

Un'applicazione deve contenere almeno una directory virtuale, denominata directory virtuale radice o predefinita con le impostazioni di configurazione definite in un <virtualDirectory> elemento.

Compatibilità

Versione Note
IIS 10.0 L'elemento <application> non è stato modificato in IIS 10.0.
IIS 8,5 L'elemento <application> non è stato modificato in IIS 8.5.
IIS 8,0 L'attributo preloadEnabled è stato aggiunto per avviare il processo di inizializzazione prima di ricevere una richiesta.
IIS 7,5 L'elemento <application> è stato aggiornato per includere gli serviceAutoStartEnabled attributi e serviceAutoStartProvider .
IIS 7.0 L'elemento <application> è stato introdotto in IIS 7.0.
IIS 6.0 L'elemento <application> sostituisce gli oggetti metabase IIS 6.0 IIsWebVirtualDir e IIsWebDirectory .

Installazione

L'elemento <application> è incluso nell'installazione predefinita di IIS 7 e versioni successive.

Procedure

Come creare una nuova applicazione Web

  1. Aprire Gestione Internet Information Services (IIS):

    • Se si usa Windows Server 2012 o Windows Server 2012 R2:

      • Sulla barra delle applicazioni fare clic su Server Manager, scegliere Strumenti, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows 8 o Windows 8.1:

      • Tenere premuto il tasto Windows, premere la lettera X e quindi fare clic su Pannello di controllo.
      • Fare clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Server 2008 o Windows Server 2008 R2:

      • Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Gestione Internet Information Services (IIS).
    • Se si usa Windows Vista o Windows 7:

      • Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
      • Fare doppio clic su Strumenti di amministrazione, quindi fare doppio clic su Gestione Internet Information Services (IIS).
  2. Nel riquadro Connessioni espandere il nome del server, espandere Siti e quindi fare clic sul sito Web a cui si vuole aggiungere un'applicazione.

  3. Nel riquadro Azioni fare clic su Visualizza applicazioni e quindi su Aggiungi applicazione...
    Screenshot del riquadro Applicazioni in I S Manager con l'opzione Aggiungi applicazione evidenziata nel riquadro Azioni.

  4. Nella finestra di dialogo Aggiungi applicazione immettere almeno le informazioni nelle caselle di testo Alias: e Physical path: e quindi fare clic su OK.
    Screenshot della finestra di dialogo Aggiungi applicazione con i campi per Alias e Percorso fisico.

    Nota

    È possibile fare clic su Seleziona per scegliere un pool di applicazioni diverso, fare clic su Connetti come per configurare l'applicazione per accettare le credenziali da un account specifico e fare clic su Impostazioni di test per testare le impostazioni di autenticazione e autorizzazione per l'applicazione.

Configurazione

L'elemento <application> è configurabile a livello di server nel file ApplicationHost.config.

Attributi

Attributo Descrizione
applicationPool Attributo stringa facoltativo.

Specifica il pool di applicazioni a cui è assegnata l'applicazione.

Non è previsto alcun valore predefinito.
enabledProtocols Attributo stringa facoltativo.

Specifica i protocolli tramite cui comunicare con l'applicazione. Questo valore abilita i protocolli HTTP e HTTPS per l'applicazione.

Il valore predefinito è http.
path Attributo stringa obbligatorio.

Specifica il percorso virtuale dell'applicazione. Deve essere un percorso univoco all'interno del sito padre.

Non è previsto alcun valore predefinito.
preloadEnabled Attributo booleano facoltativo.

Specifica che IIS simula una richiesta utente alla pagina predefinita di un'applicazione o di una directory virtuale in modo che venga inizializzata. In effetti IIS avvia l'applicazione all'avvio del pool di applicazioni senza aver ricevuto una richiesta. Ciò aumenta le prestazioni eseguendo attività di inizializzazione, ad esempio il caricamento di moduli gestiti e la compilazione di codice gestito. Nei log IIS non viene generato alcun log. L'impostazione startMode del pool di applicazioni deve essere impostata su AlwaysRunning.

Il valore predefinito è False.
serviceAutoStartEnabled Attributo booleano facoltativo.

true se l'avvio automatico è abilitato per questa applicazione; in caso contrario, false.

Il valore predefinito è false.
serviceAutoStartProvider Attributo stringa facoltativo.

Specifica il nome del provider di avvio automatico che verrà usato dal servizio attivazione processo Windows (WAS) se serviceAutoStartEnabled è impostato su true.

Non è previsto alcun valore predefinito.

Elementi figlio

Elemento Descrizione
virtualDirectory Elemento facoltativo.

Specifica le impostazioni di configurazione per una directory virtuale nell'applicazione padre.
virtualDirectoryDefaults Elemento facoltativo.

Specifica le impostazioni predefinite per tutte le directory virtuali nell'applicazione padre.

Esempio di configurazione

Nell'esempio di configurazione seguente viene visualizzato un <site> elemento che contiene due applicazioni. Il primo <application> elemento definisce l'applicazione radice per il sito, insieme alla directory virtuale radice per l'applicazione. Il secondo <application> elemento contiene le impostazioni di configurazione per un'applicazione CRM nel sito Web. L'attributo path definisce il percorso dell'applicazione. Questo <application> elemento contiene due <virtualDirectory> elementi. Il primo definisce la directory virtuale radice per l'applicazione e il secondo definisce una directory virtuale Images per l'applicazione.

<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>

Codice di esempio

Gli esempi seguenti creano una nuova applicazione denominata ShoppingCart con una radice di directory virtuale C:\Inetpub\Contoso\ShoppingCart per un sito denominato Contoso.

Nota

Quando si crea un'applicazione dal prompt dei comandi o da uno script, è necessario creare in modo esplicito una directory virtuale radice per l'applicazione.

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

Nota

È necessario assicurarsi di impostare il parametro commit su apphost quando si usa AppCmd.exe per configurare queste impostazioni. In questo modo le impostazioni di configurazione vengono confermate nella sezione relativa al percorso appropriato nel file ApplicationHost.config.

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 IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(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