Search code examples
c#iisiis-6port

Programmatically create a web site in IIS using C# and set port number


We have been able to create a web site. We did this using the information in this link:

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

However, we would like to use a port number other that port 80. How do we do this?

We are using IIS 6


Solution

  • If you're using IIS 7, there is a new managed API called Microsoft.Web.Administration

    An example from the above blog post:

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

    If you're using IIS 6 and want to do this, it's more complex unfortunately.

    You will have to create a web service on every server, a web service that handles the creation of a website because direct user impersonation over the network won't work properly (If I recall this correctly).

    You will have to use Interop Services and do something similar to this (This example uses two objects, server and site, which are instances of custom classes that store a server's and site's configuration):

    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;
    

    See more here