programming4us
programming4us
WEBSITE

IIS 7.0 : Managing Administration Extensions

- How To Install Windows Server 2012 On VirtualBox
- How To Bypass Torrent Connection Blocking By Your ISP
- How To Install Actual Facebook App On Kindle Fire
6/30/2012 3:19:32 PM
The IIS 7.0 configuration system provides a structured mechanism for controlling the behavior of IIS and its features. In a way, the configuration system exposes an object model for IIS, enabling you to inspect and control IIS objects such as sites, application pools, applications, and virtual directories. The configuration system is also extensible through the configuration section schema, which enables additional Web server functionality to expose configuration through its object model.

Though the ability to manage Web server configuration is its primary purpose, the IIS 7.0 configuration system takes the concept of a management object model to the next logical level. It enables configuration sections to also expose dynamic properties and methods that are backed by code instead of static configuration data.

This is done through the use of administration extensions to the configuration system. A great example of the value that administration extensions bring to IIS 7.0 administration is IIS 7.0’s own <applicationPools> configuration section, which contains a collection of application pool definitions and associated configuration. IIS 7.0 also ships a schema extension to this section, adding dynamic attributes and methods backed by the Runtime State and Control API (RSCA). This enables the reader of the <applicationPools> configuration section to also retrieve run-time information for each application pool element, including:

  • Its state (started/stopped)

  • The list of currently running worker processes in the application pool

  • The list of currently executing requests in each worker process

  • The list of currently loaded ASP.NET appdomains in each worker process

In addition, it exposes methods that enable the caller to recycle each application pool or unload an ASP.NET appdomain in a particular worker process. All of this functionality is exposed through the same APIs that are used to navigate the configuration object model, blurring the line between static configuration and run-time behavior exposed by IIS objects.

For example, here is a C# script that uses the IIS 7.0 configuration objects to list all application pools on the system, including some of their configuration information and the list of currently executing worker processes (provided by the RSCA administration extension):

    var adminManager = new ActiveXObject("Microsoft.ApplicationHost.AdminManager");

    var appPoolsSection = adminManager.GetAdminSection(
        "system.applicationHost/applicationPools",
         "MACHINE/WEBROOT/APPHOST");

    //
    //  Enumerate the application pools collection
    //
    var appPoolsCollection = appPoolsSection.Collection;
    for(var i = 0; i < appPoolsCollection.Count; i++)
    {
        var appPoolElement = appPoolsCollection.Item(i);

        var name = appPoolElement.GetPropertyByName("name").Value;
   var appPoolStateProperty = appPoolElement.GetPropertyByName("state");
        var state =
                appPoolStateProperty.Schema.PossibleValues.Item
                             (
                               appPoolStateProperty.Value
                             ).Name;
        WScript.Echo("Application Pool *" + name + "* (" + state + ")");

        //
        //  Enumerate the worker processes collection
        //
        var workerProcessesElement =
appPoolElement.ChildElements.Item("workerProcesses");
        var workerProcessCollection = workerProcessesElement.Collection;

        for(var wp = 0; wp < workerProcessCollection.Count; wp++)
        {
            var workerProcess = workerProcessCollection.Item(wp);
            WScript.Echo("  Worker process - " +
workerProcess.GetPropertyByName("processId").Value);
        }
    }

A sample output of this script (which follows) shows the application pools configured on the machine, their state, and the list of active worker processes in each pool. The latter two pieces of information come from the RSCA administration extension, yet the programming experience to access them is indistinguishable from accessing attributes coming from configuration. The sample output looks like this:

Application Pool *DefaultAppPool* (Started)
  Worker process - 2900
Application Pool *Classic .NET AppPool* (Started)

In addition to exposing run-time information through the configuration object model, administration extensions also provide a convenient way to package administration or deployment tasks and expose them as methods on the related configuration sections. Next, you will look at how administration extensions work.

How Administration Extensions Work

An administration extension is a COM object that implements one or more interfaces published by the IIS 7.0 configuration system to provide values of dynamic attributes and/or execute dynamic methods on configuration sections.

It is linked to the section via the section’s schema definition. For dynamic attributes, the attribute definition can simply specify the COM ProgId of the administration extension’s COM object via the extension schema property. The schema can also contain method definitions for dynamic methods that can accept arguments and return information. For an example of both, we can turn to the RSCA extension schema, contained in Rscaext.xml, that adds the dynamic functionality to the base <sites> and <applicationPools> configuration sections.

  <sectionSchema name="system.applicationHost/sites">
    <collection addElement="site">
      <attribute name="state" type="enum"
extension="Microsoft.ApplicationHost.RscaExtension">
        <enum name="Starting" value="0" />
        <enum name="Started" value="1" />
        <enum name="Stopping" value="2" />
        <enum name="Stopped" value="3" />
        <enum name="Unknown" value="4" />
      </attribute>
      <method name="Start"
extension="Microsoft.ApplicationHost.RscaExtension" />
      <method name="Stop"
extension="Microsoft.ApplicationHost.RscaExtension" />
    </collection>
  </sectionSchema>

The schema adds a state attribute to each <site> element, which is backed by the Microsoft.ApplicationHost.RscaExtension COM object. It also defines the Start and Stop methods that are also backed by that extension.

Note

You may notice that the Rscaext.xml file contains schema definitions for dynamic attributes and methods for already defined <sites> and <applicationPools> configuration sections. This takes advantage of the configuration schema merging support in the configuration system, which enables new schema files to extend existing configuration sections and not just add new ones.

When the configuration script accesses the dynamic properties or invokes the dynamic methods in the configuration section, the administration extension is invoked to provide the attribute value and execute the method. If the caller does not ask for dynamic attributes or invoke methods, then the Administration extension is never created and invoked, and the user continues to work with static configuration only.

Installing Administration Extensions

To install administration extensions, register them with the section schema, either as part of new configuration section definitions or by adding new dynamic attributes and method definitions for existing configuration sections. From the schema perspective, the installation of new Administration extensions is the same as installing new configuration sections .

Because Administration extensions are backed by COM objects, the COM object that implements the required interfaces must be registered on the system (this is typically done with Regsvr32.exe or with Regasm.exe for .NET COM objects). The COM registration information must include the friendly ProgId name that is referenced in the configuration section schema.

Securing Administration Extensions

Unlike configuration sections, Administration extensions contain code and therefore pose a risk to your server. What’s more, Administration extensions are invoked by management tools and scripts that are typically run by Administrators, which enables their code to execute with administrative privileges. In fact, many administration extensions require administrative privileges to operate, including the RSCA extension that is included with IIS 7.0.

This is in contrast with Web server modules that by default execute in IIS worker processes that run under lower privilege identities and can be further sandboxed by ASP.NET’s Code Access Security (for managed modules). Therefore, Administration extensions can pose a significantly higher risk to the server then Web server modules.

The ability to publish configuration section schema is restricted to Administrators (as is the ability to register COM objects on the machine). This eliminates the possibility of untrusted users on the machine being able to register Administration extensions. However, Administrators themselves must exercise caution when installing administrative extensions and be sure to trust the source of each extension.

Table 1 shows some of the configuration system’s typical users that have the ability to load and invoke administration extensions.

Table 1. Users and Privileges for Administration Extensions

User

Execution Privilege

WAS

Does not use extensions

IIS Worker Processes

Does not use extensions

Metabase Compatibility (Inetinfo.exe)

Does not use extensions

WMI Service

Local System

Appcmd

Does not use extensions

IIS Manager (Inetmgr.exe)

Caller (typically Administrator)

Configuration scripts, Microsoft.Web.Administration programs

Caller (typically Administrator)

WAS, IIS worker processes, Metabase Compatibility, and Appcmd.exe all disable the use of administration extensions (for different reasons). However, the WMI service, scripts that use the configuration system COM objects, and .NET programs that use the Microsoft.Web.Administration APIs all have access to running administration extensions and often run (and have to run) with administrative privileges (this happens whenever the caller has administrative privileges). As such, there is no easy way to sandbox administration extensions. Therefore, extreme caution must be taken in installing those extensions on the server.

Other  
 
Top 10
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 2) - Wireframes,Legends
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Finding containers and lists in Visio (part 1) - Swimlanes
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Formatting and sizing lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Adding shapes to lists
- Microsoft Visio 2013 : Adding Structure to Your Diagrams - Sizing containers
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 3) - The Other Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 2) - The Data Properties of a Control
- Microsoft Access 2010 : Control Properties and Why to Use Them (part 1) - The Format Properties of a Control
- Microsoft Access 2010 : Form Properties and Why Should You Use Them - Working with the Properties Window
- Microsoft Visio 2013 : Using the Organization Chart Wizard with new data
REVIEW
- First look: Apple Watch

- 3 Tips for Maintaining Your Cell Phone Battery (part 1)

- 3 Tips for Maintaining Your Cell Phone Battery (part 2)
programming4us programming4us
programming4us
 
 
programming4us