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.