2009-08-17 9 views
31

Wir konnten eine Website erstellen. Wir taten dies die Informationen in diesem Link:Programmatisch erstellen Sie eine Website in IIS mit C# und legen Sie die Portnummer

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

jedoch

, wir möchten andere eine Portnummer verwenden, die Port 80. Wie können wir das tun?

Wir verwenden IIS 6

+0

Was IIS-Version verwenden Sie? – kitsune

+0

Wir verwenden IIS 6 –

+0

Sie möchten den Port während der Installation angeben oder Sie möchten die Website zu IIS per Code hinzufügen? –

Antwort

65

Wenn Sie IIS 7 verwenden, gibt es eine neue verwaltete API Microsoft.Web.Administration

Ein Beispiel aus dem oben genannten Blog-Post:

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

Wenn Sie IIS 6 verwenden und dies tun möchten, ist es leider komplexer.

Sie müssen einen Webdienst auf jedem Server erstellen, einen Webdienst, der die Erstellung einer Website übernimmt, weil der direkte Identitätswechsel des Benutzers über das Netzwerk nicht ordnungsgemäß funktioniert (wenn ich mich richtig erinnere).

Sie Interop Services verwenden und so etwas wie dies tun (Dieses Beispiel zwei Objekte verwendet, Server und Standort, die Instanzen von benutzerdefinierten Klassen sind, die ein Server speichern und Konfiguration der Website):

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; 

sehen Sie mehr here

+0

Danke, leider verwenden wir IIS 6. –

+0

Ich habe dies in einem alten Wartungsprojekt einmal gemacht, ich werde sehen, ob ich den Code finden kann. Es ist ziemlich geheimnisvoll und verschachtelt leider. – kitsune

+0

Danke. Der zweite Code, den du gepostet hast, hat funktioniert. –

0
  1. In Eigenschaften der Website wählen Sie "Web Site" Registerkarte und geben Sie TCP-Port.
  2. Im Studio zum Debuggen Zweck angeben http://localhost:<port>/<site&gt; im Register Web für "Use Local IIS Web Server"
+0

Vielen Dank für Ihre Antwort. Aber so funktioniert es mit der Benutzeroberfläche, ich muss wissen, wie man es im Code macht. –

+0

Können Sie WMI über JScript oder VBScript verwenden? – Dewfy

4

den folgenden Code Versuchen die nicht verwendeten 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 die Lösung zu kennen.
Blog article : How to add new website in IIS 7

On Button klicken:

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

über Websites, Looping, ob Namen existiert bereits

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

Nur für IIS7 ..Kann keine Referenz für IIS6 – ppumkin

+5

-1 für ungarische Notation finden –