System.DirectoryServices sfruttando ADSI permette l'interfacciamento ad Internet Information Services 6. Spesso si ha la necessità di eseguire operazioni batch per una grande quantità di domini internet presenti all'interno del proprio server/webfarm.
Il codice che segue esegue le operazioni di set e delete degli HostHeaders per un determinato Virtual Server (un sito configurato) all'interno di IIS.
Note:
Referenziare System.DirectoryServices
private void Execute()
{
string[] a = new string[2];
a[0] = ":80:forum.dominio.it";
a[1] = ":80:www.dominio.it";
// Setta gli headers presenti nell'array
// per il dominio che ha IDIIS pari a 1967680450
SetIISHostHeader(a, 1967680450);
// Cerca e rimuovi gli headers che hanno corrispondenza
// con i valori presenti all'interno dell array
// gli altry lasciali
DeleteIISHostHeader(a,1967680450);
}
public static bool SetIISHostHeader(string[] header, int IDIIS)
{
bool _op_result = false;
try
{
for (int i = 0; i < header.Length; i++)
{
string m_header = header[i];
DirectoryEntry Site= new DirectoryEntry("IIS://localhost/W3SVC/" + IDIIS);
Site.Properties["ServerBindings"].Add(m_header);
Site.CommitChanges();
}
_op_result = true;
}
catch (Exception ex)
{
_op_result = false;
}
return _op_result;
}
public static bool DeleteIISHostHeader(string[] header, int IDIIS)
{
bool _op_result = false;
try
{
for (int i = 0; i < header.Length; i++)
{
string m_header = header[i];
DirectoryEntry Site= new DirectoryEntry("IIS://localhost/W3SVC/" + IDIIS);
// ZeroBased Index
int _iis_indexer = -1;
refreshdata:
foreach(string pippo in Site.Properties["ServerBindings"])
{
_iis_indexer++;
// qui la collection cambia di indice è necessario rendicizzare il tutto
// WorkAround. Segnare all'interno di un array tutti gli id da cancellare
if (pippo == m_header)
{
Site.Properties["ServerBindings"].RemoveAt(_iis_indexer);
Site.CommitChanges();
_iis_indexer = -1;
// Dopo il commit dai 0.3 secondi ad IIS per rendere
// effettive le modifiche al sistema
System.Threading.Thread.Sleep(300);
// e continua il loop fino a che non hai finito
goto refreshdata;
}
}
}
_op_result = true;
}
catch (Exception ex)
{
_op_result = false;
}
return _op_result;
}
E' bene ricordare che ADSI, nasce principalmente come interfaccia ABO per la programmazione di Active Directory. Per eseguire questa operazioni è tuttavia possibile (e consigliabile) utilizzare Windows Management Interface WMI, la cui struttura permette una maggiore velocità in fase di esecuzione.