Archive for April, 2008


Adding a Website to IIS7 programmatically

Some time ago, I blogged about Adding an Application Pool to IIS7 programmatically. The result was a new Application Pool, that uses the Integrated Pipeline in IIS7.

In this post I will show you how to add a new Website, that uses the Application Pool from the other blog post.

I’ve loaded the Console Application I used to add the Application Pool, and moved the logic from Main to a method called AddApplicationPool, to split it up nicely. It is actually even easier to add a website programmatically. Below is the code for doing just that:

private static void AddWebSite()
{
  ServerManager mgr = new ServerManager();

  if (!Directory.Exists(@"c:\inetpub\wwwroot\iis7test"))
  {
    Directory.CreateDirectory(@"c:\inetpub\wwwroot\iis7test");
  }

  // Add a new Site to the server, configured to use our the iis7test home directory.
  Site site = mgr.Sites.Add("MyWebSite", @"c:\inetpub\wwwroot\iis7test", 80);

  // Set the application pool name of the site, to use the MyAppPool application pool.
  site.ApplicationDefaults.ApplicationPoolName = "MyAppPool";

  // Clear all bindings.
  site.Bindings.Clear();

  // Make the site listen to incoming HTTP requests using host header iis7test, on port 80.
  site.Bindings.Add("*:80:iis7test", "http");

  // Set auto start to true.
  site.ServerAutoStart = true;

  // Commit the changes
  mgr.CommitChanges();
}

Notice how we add Bindings to the website. Bindings is the information that tells IIS7 when to serve our website. We use this string to configure bindings: *:80:iis7test. The first * tells IIS to listen on all IP addresses on your system. 80 is the port number, and iis7test is the host header value for this site.

To browse our website, we need to add iis7test to the computers hosts file (located in %WINDIR%\System32\Drivers\etc), and point it to 127.0.0.1.


kick it on DotNetKicks.com

Adding an Application Pool to IIS7 programmatically

Internet Information Services 7 (IIS7) has a great new set of features regarding configuration. Using the Integrated Configuration system, you can configure your server from XML files, the IIS7 manager, the command prompt using the APPCMD tool, but IIS7 also lets you manage your server from managed code in a very intuitive manner.

If you navigate to the %WINDIR%\System32\InetSrv folder in Windows Vista, you’ll find all the executables, DLL’s and XML (.config) configuration files you need. It doesn’t matter if you use the IIS7 Manager, managed code or the APPCMD command-line based tool to manage your server – at the end of the day you are changing an XML file. That is applicationHost.config which is located here: C:\Windows\System32\inetsrv\config\applicationHost.config.

The integrated configuration system on IIS7 is great news for hosters, and web developers. Hosters can easily automate server management through managed code, and as a web developer, you can configure your server from your web.config file, which makes it easy to move your web application from development, to test, and further up towards production. Read my post on how to set a websites default document, from within the web application’s web.config file.

In this post, I will create an application pool on my local IIS7.

Launch Visual Studio 2005 or 2008 – whatever you’ve got will work.

Create a new Console Application, and give it a name of your own choice.

Right click References in the Solution Explorer and add a new reference.

image

Locate Microsoft.Web.Administration.dll from the C:\Windows\System32\inetsrv folder.

To access IIS7, we use the ServerManager class, as shown below.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using Microsoft.Web.Administration;
   6:  
   7:  namespace Iis7ManagementTest
   8:  {
   9:    class Program
  10:    {
  11:      static void Main(string[] args)
  12:      {
  13:        ServerManager mgr = new ServerManager();
  14:  
  15:        // Add a new application pool called MyAppPool
  16:        ApplicationPool myAppPool = mgr.ApplicationPools.Add("MyAppPool");
  17:  
  18:        // Configure my new app pool to start automatically.
  19:        myAppPool.AutoStart = true;
  20:  
  21:        // What action should IIS take when my app pool exceeds 
  22:        // the CPU limit specified by the Limit property
  23:        myAppPool.Cpu.Action = ProcessorAction.KillW3wp;
  24:  
  25:        // Use the Integrated Pipeline mode
  26:        myAppPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
  27:  
  28:        // Set the runtime version of ASP.NET to 2.0
  29:        myAppPool.ManagedRuntimeVersion = "V2.0";
  30:  
  31:        // Use the Network Service account
  32:        myAppPool.ProcessModel.IdentityType = ProcessModelIdentityType.NetworkService;
  33:  
  34:        // Shut down after being idle for 5 minutes.
  35:        myAppPool.ProcessModel.IdleTimeout = TimeSpan.FromMinutes(5);
  36:  
  37:        // Max. number of IIS worker processes (W3WP.EXE)
  38:        myAppPool.ProcessModel.MaxProcesses = 1;
  39:  
  40:        // Commit the changes
  41:        mgr.CommitChanges();
  42:      }
  43:    }
  44:  }

After the application has been executed, we will see our new application pool inside the IIS7 Manager:

image

That’s all for now. In another blog post I will show how to add a new web site, that will use our new application pool – also from managed code.

kick it on DotNetKicks.com

Powered by WordPress | Theme: Motion by 85ideas.