2009-08-17 13 views
31

Siamo stati in grado di creare un sito web. L'abbiamo fatto utilizzando le informazioni in questo link:Creare un sito Web in IIS utilizzando C# e impostare il numero di porta

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

Tuttavia, vorremmo utilizzare un numero di porta altro che porta 80. Come facciamo a fare questo?

Stiamo usando IIS 6

+0

Cosa IIS versione stai usando? – kitsune

+0

Stiamo utilizzando IIS 6 –

+0

per specificare la porta durante l'installazione o si desidera aggiungere il sito Web a IIS in base al codice? –

risposta

65

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

Un esempio dal post del blog di cui sopra:

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

Se si utilizza IIS 6 e si desidera eseguire questa operazione, purtroppo è più complesso.

Sarà necessario creare un servizio Web su ogni server, un servizio Web che gestisce la creazione di un sito Web perché la rappresentazione diretta dell'utente in rete non funzionerà correttamente (Se ricordo correttamente).

Si dovrà utilizzare interoperabilità Servizi e fare qualcosa di simile a questo (Questo esempio utilizza due oggetti, di server e il sito, che sono istanze di classi personalizzate che contengono una configurazione del sito del server e):

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; 

Tutte le here

+0

Grazie, sfortunatamente stiamo usando IIS 6. –

+0

Ho fatto questo in un progetto di manutenzione legacy una volta, vedrò se riesco a trovare il codice. È piuttosto arcano e sfortunatamente sfortunato. – kitsune

+0

Grazie. Il secondo set di codice che hai postato ha funzionato. –

0
  1. In proprietà del sito selezionare la scheda "Sito Web" e specificare la porta TCP.
  2. In studio per eseguire il debug, specificare http://localhost:<port>/<site&gt; a scheda Web per "Web Server Utilizzare IIS locale"
+0

Grazie per la risposta. Ma è così che lo fai usando l'interfaccia utente, ho bisogno di sapere come farlo in codice. –

+0

È possibile utilizzare wmi su JScript o VBScript? – Dewfy

4

provare il seguente codice a conoscere il inutilizzato PortNo

 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 soluzione.
Blog article : How to add new website in IIS 7

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

Looping 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; 
    } 
+0

Solo per IIS7 ..Impossibile trovare il riferimento per IIS6 – ppumkin

+5

-1 per la notazione ungherese –

Problemi correlati