Crea a livello di codice un sito Web in IIS utilizzando C # e imposta il numero di porta

Siamo stati in grado di creare un sito web. Lo abbiamo fatto utilizzando le informazioni in questo link:

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

Tuttavia, vorremmo utilizzare un numero di porta diverso da quella porta 80. Come facciamo?

Stiamo usando IIS 6

Se si utilizza IIS 7, è disponibile una nuova API gestita denominata Microsoft.Web.Administration

Un esempio dal post del blog sopra:

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

Se stai usando IIS 6 e vuoi farlo, sfortunatamente è più complesso.

Dovrai creare un servizio Web su ogni server, un servizio Web che gestisce la creazione di un sito Web perché la rappresentazione diretta degli utenti sulla rete non funzionerà correttamente (se ricordo correttamente).

Dovrai utilizzare i servizi di interoperabilità e fare qualcosa di simile a questo (in questo esempio vengono utilizzati due oggetti, server e sito, che sono istanze di classi personalizzate che memorizzano la configurazione di un server e del sito):

 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; 

Vedi di più qui

Ecco la soluzione.
Articolo del blog: come aggiungere un nuovo sito Web in IIS 7

Sul pulsante clic:

 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); } 

In loop sui siti se il nome esiste già

  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; } 

Prova il seguente codice per conoscere il PortNo non utilizzato

  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; 
  1. Nelle proprietà del sito selezionare la scheda “Sito Web” e specificare Porta TCP.
  2. In studio per il debug, specificare http: // localhost: /