tags:

views:

1161

answers:

3
+4  A: 

Here is a related post in retrieving the site Id.

Here some code that might work for you:

using System.DirectoryServices;
using System;

public class IISAdmin
{
   public static void GetWebsiteID(string websiteName)
   {
      DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/w3svc");

     foreach(DirectoryEntry de in w3svc.Children)
     {
        if(de.SchemaClassName == "IIsWebServer" && de.Properties["ServerComment"][0].ToString() == websiteName)
        {
           Console.Write(de.Name);
        }

     }

  }
  public static void Main()
  {
     GetWebsiteID("Default Web Site");
  }

}

Here's the link to the original post.

I'm not sure if it will work on IIS7, but if you install the IIS6 compatibility components for IIS7 it should work.

Chuck Conway
+7  A: 
System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
Mehdi Golchin
That's exactly what I was looking for. Thank you so much. Do you know whether it works for both IIS6 and 7?
Søren Spelling Lund
Sorry, I haven't tested it in IIS 6.
Mehdi Golchin
I tested it for IIS 7/5.1 a few minutes age, I think it works for IIS 6 (90%).
Mehdi Golchin
+1  A: 

You are looking for ServerManager (Microsoft.Web.Administration) which provides read and write access to the IIS 7.0 configuration system.

Iterate through Microsoft.Web.Administration.SiteCollection, get a reference to your website using the Site Object and read the value of the Name property.

// Snippet        
using (ServerManager serverManager = new ServerManager()) { 

var sites = serverManager.Sites; 
foreach (Site site in sites) { 
         Console.WriteLine(site.Name); // This will return the WebSite name
}

You can also use LINQ to query the ServerManager.Sites collection (see example below)

// Start all stopped WebSites using the power of Linq :)
var sites = (from site in serverManager.Sites 
            where site.State == ObjectState.Stopped 
            orderby site.Name 
            select site); 

        foreach (Site site in sites) { 
            site.Start(); 
        }

Note : Microsoft.Web.Administration works only with IIS7.

For IIS6 you can use both ADSI and WMI to do this, but I suggest you to go for WMI which is faster than ADSI. If using WMI, have a look at WMI Code Creator 1.0 (Free / Developed by Microsoft). It will generate the code for you.

HTH

ntze