2009-08-17 31 views
31

Hemos podido crear un sitio web. Lo hicimos uso de la información en este enlace:Crear mediante programación un sitio web en IIS utilizando C# y establecer el número de puerto

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

Sin embargo, nos gustaría utilizar un número de puerto que el puerto 80. ¿Cómo podemos hacer esto?

Estamos utilizando IIS 6

+0

Lo IIS versión está utilizando? – kitsune

+0

Estamos utilizando IIS 6 –

+0

¿desea especificar el puerto durante la configuración o desea agregar el sitio web a IIS por código? –

Respuesta

65

Si está utilizando IIS 7, hay una nueva llamada API administrada Microsoft.Web.Administration

Un ejemplo de la entrada de blog anterior:

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

Si está utilizando IIS 6 y quiere hacer esto, lamentablemente es más complejo.

Deberá crear un servicio web en cada servidor, un servicio web que maneja la creación de un sitio web porque la suplantación directa del usuario a través de la red no funcionará correctamente (si recuerdo esto correctamente).

Usted tendrá que utilizar servicios de interoperabilidad y hacer algo similar a esto (Este ejemplo utiliza dos objetos, el servidor y el sitio, que son instancias de clases personalizadas que almacenan una configuración de sitio del servidor y):

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; 

ver más here

+0

Gracias, desafortunadamente estamos usando IIS 6. –

+0

Hice esto en un proyecto de mantenimiento heredado una vez, veré si puedo encontrar el código. Es bastante arcano y complicado por desgracia. – kitsune

+0

Gracias. El segundo conjunto de código que publicaste funcionó. –

0
  1. En propiedades del sitio seleccione la pestaña "Sitio Web" y especificar el puerto TCP.
  2. En estudio para depurar el propósito, especifique http://localhost:<port>/<site&gt; en Web pestaña de "Uso de IIS local servidor Web"
+0

Gracias por su respuesta. Pero así es como lo haces usando la IU, necesito saber cómo hacerlo en código. –

+0

¿Se puede usar wmi sobre JScript o VBScript? – Dewfy

4

intente lo siguiente código para saber el no utilizados 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

Aquí está la solución.
Blog article : How to add new website in IIS 7

El clic de los botones:

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

bucle sobre los sitios si el nombre ya existe

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 para IIS7.No se puede encontrar la referencia para IIS6 – ppumkin

+5

-1 para la notación húngara –

Cuestiones relacionadas