2009-08-17 7 views
31

Nous avons été en mesure de créer un site Web. Nous l'avons fait en utilisant les informations contenues dans ce lien:Créer par programme un site Web dans IIS en utilisant C# et définir le numéro de port

https://msdn.microsoft.com/en-us/library/ms525598.aspx

Cependant, nous voudrions utiliser un numéro de port autre que le port 80. Comment pouvons-nous faire?

Nous utilisons IIS 6

+0

Quelle IIS version utilisez-vous? – kitsune

+0

Nous utilisons IIS 6 –

+0

vous souhaitez spécifier le port lors de l'installation ou vous voulez ajouter le site Web à IIS par code? –

Répondre

65

Si vous utilisez IIS 7, il y a une nouvelle API managée appelée Microsoft.Web.Administration

Un exemple du billet de blog ci-dessus:

ServerManager iisManager = new ServerManager(); 
iisManager.Sites.Add("NewSite", "http", "*:8080:", "d:\\MySite"); 
iisManager.CommitChanges(); 

Si vous utilisez IIS 6 et que vous voulez faire cela, c'est plus complexe malheureusement.

Vous devrez créer un service Web sur chaque serveur, un service Web qui gère la création d'un site Web car l'usurpation d'identité directe sur le réseau ne fonctionnera pas correctement (si je me souviens bien).

Vous devrez utiliser Interop Services et faire quelque chose de similaire à ce (Cet exemple utilise deux objets, le serveur et le site, qui sont des instances de classes personnalisées qui stockent de serveur et la configuration du site):

string metabasePath = "IIS://" + server.ComputerName + "/W3SVC"; 
DirectoryEntry w3svc = new DirectoryEntry(metabasePath, server.Username, server.Password); 

string serverBindings = ":80:" + site.HostName; 
string homeDirectory = server.WWWRootPath + "\\" + site.FolderName; 


object[] newSite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory }; 

object websiteId = (object)w3svc.Invoke("CreateNewSite", newSite); 

// Returns the Website ID from the Metabase 
int id = (int)websiteId; 

Voir plus here

+0

Merci, malheureusement, nous utilisons IIS 6. –

+0

Je l'ai fait dans un projet de maintenance hérité une fois, je vais voir si je peux trouver le code. C'est assez mystérieux et alambiqué malheureusement. – kitsune

+0

Merci. Le deuxième ensemble de code que vous avez publié a fonctionné. –

0
  1. Dans les propriétés du site de sélectionnez l'onglet "Site Web" et indiquez le port TCP.
  2. En studio pour le débogage, spécifiez http://localhost:<port>/<site&gt; à l'onglet Web pour "Utiliser IIS local serveur Web"
+0

Merci pour votre réponse. Mais voici comment vous le faites en utilisant l'interface utilisateur, j'ai besoin de savoir comment le faire dans le code. –

+0

Pouvez-vous utiliser wmi sur JScript ou VBScript? – Dewfy

4

Essayez le code suivant à savoir le PortNo UNUSED

 DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC"); 

     // Find unused ID PortNo for new web site 
     bool found_valid_port_no = false; 
     int random_port_no = 1; 

     do 
     { 
      bool regenerate_port_no = false; 
      System.Random random_generator = new Random(); 
      random_port_no = random_generator.Next(9000,15000); 

      foreach (DirectoryEntry e in root.Children) 
      { 
       if (e.SchemaClassName == "IIsWebServer") 
       { 

        int site_id = Convert.ToInt32(e.Name); 
        //For each detected ID find the port Number 

        DirectoryEntry vRoot = new DirectoryEntry("IIS://localhost/W3SVC/" + site_id); 
        PropertyValueCollection pvcServerBindings = vRoot.Properties["serverbindings"]; 
        String bindings = pvcServerBindings.Value.ToString().Replace(":", ""); 
        int port_no = Convert.ToInt32(bindings); 

        if (port_no == random_port_no) 
        { 
         regenerate_port_no = true; 
         break; 
        } 
       } 
      } 

      found_valid_port_no = !regenerate_port_no; 
     } while (!found_valid_port_no); 

     int newportId = random_port_no; 
9

Heres la solution.
Blog article : How to add new website in IIS 7

On clique Button:

try 
{ 
    ServerManager serverMgr = new ServerManager(); 
    string strWebsitename = txtwebsitename.Text; // abc 
    string strApplicationPool = "DefaultAppPool"; // set your deafultpool :4.0 in IIS 
    string strhostname = txthostname.Text; //abc.com 
    string stripaddress = txtipaddress.Text;// ip address 
    string bindinginfo = stripaddress + ":80:" + strhostname; 

    //check if website name already exists in IIS 
    Boolean bWebsite = IsWebsiteExists(strWebsitename); 
    if (!bWebsite) 
    { 
     Site mySite = serverMgr.Sites.Add(strWebsitename.ToString(), "http", bindinginfo, "C:\\inetpub\\wwwroot\\yourWebsite"); 
     mySite.ApplicationDefaults.ApplicationPoolName = strApplicationPool; 
     mySite.TraceFailedRequestsLogging.Enabled = true; 
     mySite.TraceFailedRequestsLogging.Directory = "C:\\inetpub\\customfolder\\site"; 
     serverMgr.CommitChanges(); 
     lblmsg.Text = "New website " + strWebsitename + " added sucessfully"; 
    } 
    else 
    { 
     lblmsg.Text = "Name should be unique, " + strWebsitename + " is already exists. "; 
    } 
    } 
    catch (Exception ae) 
    { 
     Response.Redirect(ae.Message); 
    } 

Looping sur les sites si le nom existe déjà

public bool IsWebsiteExists(string strWebsitename) 
    { 
     Boolean flagset = false; 
     SiteCollection sitecollection = serverMgr.Sites; 
     foreach (Site site in sitecollection) 
     { 
      if (site.Name == strWebsitename.ToString()) 
      { 
       flagset = true; 
       break; 
      } 
      else 
      { 
       flagset = false; 
      } 
     } 
     return flagset; 
    } 
+0

Seulement pour IIS7 ..Impossible de trouver la référence pour IIS6 – ppumkin

+5

-1 pour la notation hongroise –

Questions connexes