2009-08-17 6 views
31

Udało nam się stworzyć stronę internetową. Zrobiliśmy to za pomocą informacji w ten link:Programowo utwórz stronę internetową w IIS przy użyciu C# i ustaw numer portu

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

Jednak chcielibyśmy użyć innego numeru portu ten port 80. W jaki sposób to zrobić?

Używamy IIS 6

+0

Co IIS w wersji używasz? – kitsune

+0

Używamy IIS 6 –

+0

, który chcesz określić port podczas instalacji lub chcesz dodać stronę do IIS przez kod? –

Odpowiedz

65

jeśli używasz IIS 7, nie jest nowa udało API o nazwie Microsoft.Web.Administration

Przykład z powyższym blogu:

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

Jeśli używasz usług IIS 6 i chcesz to zrobić, jest to bardziej skomplikowane, niestety.

Będziesz musiał utworzyć usługę internetową na każdym serwerze, serwis internetowy, który obsługuje tworzenie strony internetowej, ponieważ bezpośrednie podszywanie się pod użytkownika przez sieć nie będzie działało poprawnie (Jeśli dobrze pamiętam).

Będziesz musiał użyć Interop Usługi i zrobić coś podobnego do tego (Ten przykład używa dwóch obiektów, serwer i witryny, które są instancje klas niestandardowych, które przechowują serwer i konfiguracja witryny):

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; 

Zobacz więcej here

+0

Dziękuję, niestety, używamy IIS 6. –

+0

Zrobiłem to raz w starszym projekcie konserwacji, sprawdzę, czy uda mi się znaleźć kod. To dość tajemnicze i zawiłe niestety. – kitsune

+0

Dzięki. Drugi zestaw wysłanych przez Ciebie kodów działał. –

0
  1. W właściwościach stronie wybierz zakładkę "Strona internetowa" i określić port TCP.
  2. W celu przeprowadzenia debugowania w studio należy podać http://localhost:<port>/<site&gt; na karcie sieci dla "Wykorzystanie Local IIS Web Server"
+0

Dzięki za odpowiedź. Ale tak to robisz za pomocą interfejsu użytkownika, muszę wiedzieć, jak to zrobić w kodzie. –

+0

Czy możesz używać wmi nad JScript lub VBScript? – Dewfy

4

Wypróbuj poniższy kod wiedzieć niewykorzystanej nr_portu

 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

Herezje rozwiązanie.
Blog article : How to add new website in IIS 7

w przycisk kliknięcia:

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

zapętlenie nad witrynach czy nazwa już istnieje

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

Tylko dla IIS7 ..Nie można znaleźć odwołania do IIS6 – ppumkin

+5

-1 dla notacji węgierskiej –