2008-10-10 3 views
4

Je souhaite configurer une page d'administration (ASP.NET/C#) pouvant ajouter des en-têtes d'hôte IIS au site Web sur lequel la page d'administration est hébergée. Est-ce possible? Je ne veux pas ajouter un en-tête http - Je veux imiter l'action d'aller dans IIS manuellement, élever les propriétés du site, en cliquant sur avancé sur l'onglet site Web, et dans l'écran d'identification de site Web avancé et un nouveau "identité" avec la valeur de l'en-tête de l'hôte, l'adresse IP et le port tcp.Ajout d'un en-tête d'hôte IIS au site Web par programmation

+0

J'aimerais aussi savoir comment faire pour permettre aux utilisateurs de pointer leurs propres domaines sur mon système. – Ben

Répondre

2

Voici un forum sur Adding Another Identity To A Site Programmatically RSS

Aussi, est ici un article sur la façon de Append a host header by code in IIS:

L'exemple suivant ajoute un en-tête d'hôte à un site Web dans IIS. Cela implique de modifier la propriété ServerBindings. Il n'existe pas de méthode Append qui puisse être utilisée pour ajouter une nouvelle liaison de serveur à cette propriété. Il est donc nécessaire de lire la propriété entière, puis de l'ajouter de nouveau, avec les nouvelles données. C'est ce qui est fait dans le code ci-dessous. Le type de données de la propriété ServerBindings est MULTISZ et le format de chaîne est IP: Port: Hostname.

Notez que cet exemple de code ne vérifie pas les erreurs. Il est important que chaque entrée ServerBindings soit unique, et vous - le programmeur - êtes responsable de vérifier cela (ce qui signifie que vous devez faire une boucle sur toutes les entrées et vérifier si ce qui est sur le point d'être ajouté est unique).

using System.DirectoryServices; 
using System; 

public class IISAdmin 
{ 
    /// <summary> 
    /// Adds a host header value to a specified website. WARNING: NO ERROR CHECKING IS PERFORMED IN THIS EXAMPLE. 
    /// YOU ARE RESPONSIBLE FOR THAT EVERY ENTRY IS UNIQUE 
    /// </summary> 
    /// <param name="hostHeader">The host header. Must be in the form IP:Port:Hostname </param> 
    /// <param name="websiteID">The ID of the website the host header should be added to </param> 
    public static void AddHostHeader(string hostHeader, string websiteID) 
    { 

     DirectoryEntry site = new DirectoryEntry("IIS://localhost/w3svc/" + websiteID); 
     try 
     {       
      //Get everything currently in the serverbindings propery. 
      PropertyValueCollection serverBindings = site.Properties["ServerBindings"]; 

      //Add the new binding 
      serverBindings.Add(hostHeader); 

      //Create an object array and copy the content to this array 
      Object [] newList = new Object[serverBindings.Count]; 
      serverBindings.CopyTo(newList, 0); 

      //Write to metabase 
      site.Properties["ServerBindings"].Value = newList;    

      //Commit the changes 
      site.CommitChanges(); 

     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 

    } 
} 

public class TestApp 
{ 
    public static void Main(string[] args) 
    { 
     IISAdmin.AddHostHeader(":80:test.com", "1"); 
    } 
} 

Mais je ne suis pas sûr de savoir comment faire une boucle à travers les valeurs d'en-tête pour faire l'erreur de contrôle mentionnés.

Questions connexes