Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
di Saad Ladki
Introduzione
IIS 7.0 e versioni successive forniscono un'API (Managed-Code Management Application Programming Interface) completa che consente la modifica completa dei file di configurazione XML e l'accesso pratico agli oggetti server. Questo documento illustra come usare la nuova API di gestione per modificare la configurazione del server e amministrare gli oggetti server.
IIS include Microsoft.Web.Administration, una nuova API di gestione per il server Web che consente di modificare la configurazione tramite la modifica completa dei file di configurazione XML. Fornisce anche oggetti pratici per gestire il server, le relative proprietà e lo stato. L'aspetto di modifica della configurazione dell'API consente l'accesso a livello di codice alle proprietà di configurazione di lettura e scrittura nella gerarchia dei file di configurazione IIS e in file di configurazione specifici. L'aspetto di gestione degli oggetti di questa API offre una serie di oggetti di amministrazione di primo livello per la gestione diretta del server ,ad esempio siti, pool di applicazioni, processi di lavoro e così via.
Le classi di gestione risiedono nello spazio dei nomi Microsoft.Web.Administration. Le classi forniscono un'interfaccia di tipo debole per accedere alle sezioni di configurazione e agli oggetti pratici con proprietà e metodi che rappresentano gli attributi della configurazione (ad esempio il percorso di una directory virtuale) o le azioni da eseguire sull'oggetto (ad esempio riciclando un pool di applicazioni).
Creare un nuovo sito
Il seguente codice crea un sito intitolato "Sito Automobili da Corsa" con l'applicazione principale e la directory virtuale principale. Imposta anche il sito per l'uso del protocollo HTTP sulla porta 80 e definisce il percorso fisico in d:\inetput\wwwroot\racing.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing", 8080);
mySite.ServerAutoStart = true;
serverManager.CommitChanges();
}
}
}
ServerManager è la classe factory che contiene un set di oggetti pratici del server a cui sono disponibili proprietà e metodi per l'uso in modo fortemente tipizzato. È il punto di ingresso principale per la gestione del server. La gestione del server avrebbe potuto essere eseguita tramite altri percorsi più complessi (accesso al file XML di configurazione grezza o chiamate alle API di stato), ma con l’uso di questi oggetti la gestione del server risulta senza sforzo. Il set di oggetti più comune è disponibile per l'uso tramite server manager, tra cui applicazioni, directory virtuali, siti, processi di lavoro e domini applicazione.
ServerManager serverManager = new ServerManager();
L'oggetto sites consente l'accesso a proprietà e applicazioni di un sito. Contiene anche metodi per aggiungere un sito al sistema o ottenere il conteggio totale dei siti. Il metodo add definisce anche il nome del sito, il percorso della directory virtuale radice e il numero di porta come numero intero. Si noti anche che questa chiamata viene istanziata come oggetto Site, mySite, su cui possiamo agire direttamente modificando le sue proprietà.
Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing", 8080);
Gli oggetti pratici semplificano la modifica delle proprietà. Accedendo alle proprietà dall'oggetto mySite, è possibile impostare la proprietà di avvio automatico del sito su "true" direttamente senza conoscere alcun attributo XML o concetti di elemento specifici.
mySite.ServerAutoStart = true;
Inoltre, un metodo diverso che si sarebbe potuto adottare per modificare la proprietà di avvio automatico è non creare un'istanza di un oggetto sito. Recuperare invece il sito dopo la creazione e modificarne direttamente le proprietà. L'oggetto di gestione usa il concetto di indicizzatori per cercare oggetti specifici in base a chiavi quali nome o indice senza dover incorrere in chiamate costose per elencare l'intero set di oggetti. Definendo il nome, è possibile ottenere l'oggetto specifico e agire su di esso.
serverManager.Sites["Racing Cars Site"].ServerAutoStart = true;
Per aggiornare, la chiamata alle modifiche di commit esegue la transazione per serializzare la configurazione, se presente, su disco.
serverManager.CommitChanges();
L'esecuzione del codice precedente genera l'output seguente in applicationHost.config all'interno della sezione . Anziché modificare direttamente il codice XML e lavorare a livello di elemento e attributo, l'uso degli oggetti di gestione server offre un modo pratico per gestire il server Web.
<site name="Racing Cars Site" id="2" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="d:\inetpub\wwwroot\racing" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:" />
</bindings>
</site>
Creare un nuovo pool di applicazioni
Il codice seguente modifica il sito "Racing Cars Site" esistente e ne modifica il nome e il percorso fisico in d:\inetput\wwwroot\racing. Crea anche un nuovo pool di applicazioni, definisce alcune proprietà, imposta il sito dedicato alle corse per utilizzare questo pool e infine lo ricicla.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Site site = serverManager.Sites["Racing Cars Site"];
site.Name = "Racing Site";
site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";
serverManager.ApplicationPools.Add("RacingApplicationPool");
serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";
ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
serverManager.CommitChanges();
apppool.Recycle();
}
}
}
Anziché eseguire l'indicizzazione per recuperare il sito, è possibile istanziare un oggetto sito e impostare il riferimento ad esso. Dopo aver impostato il riferimento, è possibile chiamare i metodi per l'oggetto sito, in questo caso nome, per rinominare direttamente il sito.
Site site = serverManager.Sites["Racing Cars Site"];
site.Name = "Racing Site";
Ecco un altro uso degli indicizzatori per ottenere l'applicazione radice e quindi la directory radice e impostare il percorso fisico su di esso.
site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";
Oltre all'oggetto sito, è disponibile l'oggetto pool di applicazioni che offre un modo pratico per ottenere e impostare le proprietà di configurazione, nonché agire su metodi e dati di stato. Viene creato un nuovo pool di applicazioni e quindi immediatamente il sito viene inserito nel pool di applicazioni.
serverManager.ApplicationPools.Add("RacingApplicationPool");
serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";
Analogamente all'oggetto sito server manager, l'oggetto pool di applicazioni server manager consente di creare l'oggetto pool di applicazioni e di impostarvi il riferimento. È anche possibile ottenere e impostare proprietà e chiamare i metodi.
Dopo che i dati di configurazione del pool di applicazioni vengono serializzati nel file tramite la chiamata di aggiornamento, è possibile eseguire il metodo di riciclo. Questa chiamata di riciclo non è necessaria, poiché il pool di applicazioni verrà semplicemente creato e non è necessario. Ciò illustra tuttavia che l'azione può essere eseguita in oggetti creati solo dopo la serializzazione su disco e il server può recuperare questa configurazione e agire su di esso.
ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
serverManager.CommitChanges();
apppool.Recycle();
L'esecuzione del codice precedente genera l'output seguente in applicationHost.config all'interno della sezione . Anziché modificare direttamente il codice XML e lavorare a livello di elemento e attributo, l'uso degli oggetti di gestione server offre un modo pratico per gestire il server Web.
<site name="Racing Site" id="2" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="d:\racing" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:" />
</bindings>
</site>
Inoltre, le modifiche seguenti vengono apportate alla sezione :
<add name="RacingApplicationPool" managedPipelineMode="ISAPI" />
Configurare il file web.config nella directory principale del sito
Il codice seguente imposta l'attributo "enabled" della sezione su false per il sito "Sito Web predefinito".
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Configuration config =
mgr.GetWebConfiguration("Default Web Site");
ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");
ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = true;
serverManager.CommitChanges();
}
}
}
La configurazione è una classe che fornisce l'accesso alle sezioni di configurazione nel sistema. In base alle diverse chiamate per ottenere la configurazione, è possibile accedere a applicationHost.config, web.config, administration.config o qualsiasi altro file di configurazione. La chiamata GetWebConfiguration ottiene in modo specifico un file di web.config per il sito specificato, ovvero sito Web predefinito, e il percorso specifico, radice.
Configuration config = serverManager.GetWebConfiguration("Default Web Site");
Una volta acquisito il file web.config (se non esiste, viene creata), viene eseguita la chiamata per ottenere una sezione. Stiamo cercando la sezione per disabilitarla. Anche se il file web.config non esiste (o se esiste, ma non esiste alcuna sezione impostata in modo esplicito), al livello del sito è ancora applicata una configurazione efficace. Si tratta della configurazione di cui verrà eseguito l'override.
ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");
Usando i metodi nell'oggetto sezione, è possibile ottenere l'attributo abilitato e quindi impostarne il valore tramite il metodo value. Solo dopo aver chiamato il metodo di modifica del commit nella gestione server, le modifiche verranno serializzate e rese persistenti sul disco e immediatamente verranno prelevate dal server. Se sono presenti più istanze di oggetti di configurazione, la chiamata delle modifiche di commit nella gestione server rende persistenti tutti gli oggetti su disco.
ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = true;
serverManager.CommitChanges();
Un'altra opzione per ottenere e impostare le informazioni sugli attributi da una sezione consiste nell'usare gli indicizzatori. La riga di codice seguente può essere usata dopo aver ottenuto l'oggetto sezione per impostare il valore dell'attributo abilitato.
section["enabled"] = true;
Il risultato finale è la configurazione impostata nel file web.config del sito specificato.
Impostare la configurazione per un sito in applicationHost.config
Il codice seguente imposta l'attributo "enabled" della sezione su false per il sito "Sito Web predefinito".
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection section = config.GetSection("system.webServer/defaultDocument","Default Web Site");
ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = false;
serverManager.CommitChanges();
}
}
}
Questo codice è effettivamente uguale all'attività precedente; l'unica differenza è la chiamata di Configuration Manager per ottenere il file applicationHost.config tramite GetApplicationHostconfiguration.
Annotazioni
La chiamata alla sezione get è quella che specifica sia la sezione che verrà letta e/o modificata, sia il percorso della posizione.
Configuration config = serverManager.GetApplicationHostConfiguration();
Il risultato finale è la configurazione impostata sul file applicationHost.config applicabile al sito specificato tramite un tag di location.